24小时热门版块排行榜    

查看: 1951  |  回复: 7

songjunann

铜虫 (小有名气)

[求助] 请教一个应用read时出现数组越界的问题,谢谢

程序部分:
  program RDMESH
C
      IMPLICIT   NONE
      INTEGER*4  NUMNP, NUMEL
      integer*4, allocatable :: IEN(:,: ), IN(:,: )
      INTEGER*4  I, IDUM, N, NDUM                     
      REAL*8, allocatable:: X(:, : )
C
      OPEN(21,FILE='mesh.dat')
C
      READ(21,*) NUMNP, NUMEL
      READ(21,*) (IDUM, X(1,I), X(2,I),I=1,NUMNP)
c      
      READ(21,*) (NDUM, (IEN(I, N), I = 1, 4), (IN(I, N), I = 1, 4),
     &        N=1,NUMEL)

      CLOSE(21)
      END


编译通过,但是运行出现错误:forrtl: severe (161): Program Exception - array bounds exceeded,请教一下大家,问题出在哪,谢谢!
附mesh.dat的文件:

      7        5 numnp , numel
    1      0.00000E+00   0.00000E+00   1   node, x , y , ref. num.
    2      0.00000E+00   0.35803E-03   1   node, x , y , ref. num.
    3      0.00000E+00   0.70174E-03   1   node, x , y , ref. num.
    4      0.00000E+00   0.10317E-02   1   node, x , y , ref. num.
    5      0.00000E+00   0.13485E-02   1   node, x , y , ref. num.
    6      0.00000E+00   0.16526E-02   1   node, x , y , ref. num.
    7      0.00000E+00   0.19445E-02   1   node, x , y , ref. num.
    1      1     32     33      2   2   0   0   1   elt , nodes, edges ref. num.
    2      2     33     34      3   0   0   0   1   elt , nodes, edges ref. num.
    3      3     34     35      4   0   0   0   1   elt , nodes, edges ref. num.
    4      4     35     36      5   0   0   0   1   elt , nodes, edges ref. num.
    5      5     36     37      6   0   0   0   1   elt , nodes, edges ref. num.

[ Last edited by songjunann on 2011-11-14 at 13:26 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


余泽成(金币+1): 谢谢参与应助! 2011-11-14 23:32:52
楼主和lijunjiexm 一家的吧?
没测试,不过我猜应该是 READ(21,*) (IDUM, X(1,I), X(2,I),I=1,NUMNP)
错误,X是动态数组,你没有分配地址,就用了,貌似应该报溢出错误了。
2楼2011-11-14 15:43:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

songjunann

铜虫 (小有名气)

引用回帖:
2楼: Originally posted by maomao1210 at 2011-11-14 15:43:07:
楼主和lijunjiexm 一家的吧?
没测试,不过我猜应该是 READ(21,*) (IDUM, X(1,I), X(2,I),I=1,NUMNP)
错误,X是动态数组,你没有分配地址,就用了,貌似应该报溢出错误了。

不是同一个人。
按您的说法,我在 READ(21,*) NUMNP, NUMEL后面添加了语句
ALLOCATE (X(2,NUMNP),IEN(4,NUMEL),IN(4,NUMEL))
好像运行还会出错:
forrtl: severe<59>: list-directed I/O syntax error, unit 21
3楼2011-11-14 18:55:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


余泽成(金币+1): 谢谢参与应助! 2011-11-14 23:33:08
引用回帖:
3楼: Originally posted by songjunann at 2011-11-14 18:55:17:
不是同一个人。
按您的说法,我在 READ(21,*) NUMNP, NUMEL后面添加了语句
ALLOCATE (X(2,NUMNP),IEN(4,NUMEL),IN(4,NUMEL))
好像运行还会出错:
forrtl: severe<59>: list-directed I/O syntax erro ...

这是输入文件输入错误,是你文件数据的格式不符合你程序中读入的方式。程序与数据根本都对不上,呵呵。
4楼2011-11-14 20:53:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijunjiexm

铁虫 (小有名气)


余泽成(金币+1): 鼓励讨论! 2011-11-16 11:17:30
引用回帖:
4楼: Originally posted by maomao1210 at 2011-11-14 20:53:28:
这是输入文件输入错误,是你文件数据的格式不符合你程序中读入的方式。程序与数据根本都对不上,呵呵。

是这样的,第一个命令
READ(21,*) NUMNP, NUMEL
只读取   7   和    5,而后面的字符没读到,
接着第二个read语句
READ(21,*) (IDUM, X(1,I), X(2,I),I=1,NUMNP)
是从文件的第二行开始读取(第一行后面的字符其实没有关系,不影响),
之前我都是用这种方式(do语句)读取一行一行,即使一行没完全读取完整也不会出错,我怀疑是不是implicit do的方式出问题了?implicit do必须完全读取一行??
5楼2011-11-14 23:05:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

长歌-废墟

金虫 (小有名气)


余泽成(金币+1): 谢谢参与应助! 2011-11-16 11:17:42
引用回帖:
5楼: Originally posted by lijunjiexm at 2011-11-14 23:05:06:
是这样的,第一个命令
READ(21,*) NUMNP, NUMEL
只读取   7   和    5,而后面的字符没读到,
接着第二个read语句
READ(21,*) (IDUM, X(1,I), X(2,I),I=1,NUMNP)
是从文件的第二行开始读取(第一行后面的 ...

不用,隐式do循环可以只读一半记录,一条记录一行。
6楼2011-11-15 09:44:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

长歌-废墟

金虫 (小有名气)


余泽成(金币+1): 谢谢参与应助! 2011-11-16 11:17:50
不过楼主的隐式do循环确实错了,由于您的第二行后面还有字符,虽然不是数字,但是它还是会继续读下去,直到这行数据结束。fortran是使用一次read语句就指针才向下移动一次。如果您用显式do循环,由于循环的作用,其实read语句在每次循环的时候都被使用了一次,您这样写的文件就没问题。但是隐式do循环是只使用一次read语句的,就出错了。
7楼2011-11-15 09:53:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tubrinelee

新虫 (初入文坛)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-11-16 01:50:24
songjunann(金币+10): 3Q 2011-11-27 10:50:49
引用回帖:
7楼: Originally posted by 长歌-废墟 at 2011-11-15 09:53:40:
不过楼主的隐式do循环确实错了,由于您的第二行后面还有字符,虽然不是数字,但是它还是会继续读下去,直到这行数据结束。fortran是使用一次read语句就指针才向下移动一次。如果您用显式do循环,由于循环的作用, ...

楼上说得对
要把第二行及以下各行行末的字符串删掉或使用显式do循环
这样就好了

动态数组使用前需要分配大小
8楼2011-11-15 19:31:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 songjunann 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 本人考085602 化学工程 专硕 +11 不知道叫什么! 2026-03-15 13/650 2026-03-16 15:10 by 了了了了。。
[考研] 312求调剂 +3 陌宸希 2026-03-16 4/200 2026-03-16 15:06 by peike
[考研] 0703化学调剂 +5 妮妮ninicgb 2026-03-15 8/400 2026-03-16 14:44 by 可淡不可忘
[教师之家] 焦虑 +7 水冰月月野兔 2026-03-13 9/450 2026-03-16 10:00 by Quakerbird
[基金申请] NSFC申报书里申请人简历中代表性论著还需要在申报书最后的附件里面再上传一遍吗 20+5 NSFC2026我来了 2026-03-10 14/700 2026-03-15 23:53 by 不负韶华的虎
[考研] 环境调剂 +6 晓看天暮看云 2026-03-09 6/300 2026-03-14 01:16 by JourneyLucky
[考研] 一志愿安徽大学材料工程专硕313分,求调剂的学校 +8 Yu先生 2026-03-10 10/500 2026-03-14 01:04 by JourneyLucky
[考研] 复试调剂 +9 Copy267 2026-03-10 9/450 2026-03-13 23:45 by userper
[考研] 336求调剂 +6 Iuruoh 2026-03-11 6/300 2026-03-13 22:06 by JourneyLucky
[考研] (081700)化学工程与技术-298分求调剂 +12 11啦啦啦 2026-03-11 35/1750 2026-03-13 21:25 by JourneyLucky
[考研] 329求调剂 +3 miaodesi 2026-03-12 4/200 2026-03-13 20:53 by 18595523086
[考研] 332求调剂 +3 Zz版 2026-03-13 3/150 2026-03-13 20:36 by 18595523086
[考研] 一志愿211化学学硕310分求调剂 +8 努力奋斗112 2026-03-12 9/450 2026-03-13 15:41 by JourneyLucky
[考研] 290求调剂 +7 ADT 2026-03-12 7/350 2026-03-13 15:17 by JourneyLucky
[考研] 材料301分求调剂 +5 Liyouyumairs 2026-03-12 5/250 2026-03-13 14:42 by JourneyLucky
[考研] 0817化学工程与技术考研312分调剂 +3 T123 tt 2026-03-12 3/150 2026-03-13 10:49 by houyaoxu
[考研] 268求调剂 +4 好运连绵不绝 2026-03-12 4/200 2026-03-13 10:45 by hyswxzs
[考研] 一志愿河海大学085900土木水利专硕279求调剂不挑专业 +4 SunWwWwWw 2026-03-10 8/400 2026-03-13 02:23 by SunWwWwWw
[考研] 大连大学化学专业研究生调剂 +3 琪久. 2026-03-10 8/400 2026-03-11 10:02 by 琪久.
[考研] 279求调剂 +3 莫xiao 2026-03-10 4/200 2026-03-11 08:06 by 斩魂滴兔子!
信息提示
请填处理意见