24小时热门版块排行榜    

查看: 1875  |  回复: 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的回帖

长歌-废墟

金虫 (小有名气)


余泽成(金币+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的回帖
查看全部 8 个回答

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的回帖
信息提示
请填处理意见