24小时热门版块排行榜    

查看: 1950  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0703化学调剂 +4 妮妮ninicgb 2026-03-15 7/350 2026-03-16 09:43 by 闲人终南山
[考研] 环境工程调剂 +3 大可digkids 2026-03-16 3/150 2026-03-16 09:09 by DDDddddmm
[考研] 一志愿985,本科211,0817化学工程与技术319求调剂 +4 Liwangman 2026-03-15 4/200 2026-03-16 08:01 by wang_dand
[考研] 311求调剂 +6 冬十三 2026-03-15 6/300 2026-03-16 08:00 by wang_dand
[考研] 309求调剂 +4 花与叶@ 2026-03-10 4/200 2026-03-14 21:26 by a不易
[考研] 一志愿哈工大材料324分求调剂 +5 闫旭东 2026-03-14 5/250 2026-03-14 14:53 by 木瓜膏
[考研] 306求调剂 +4 唐薏薏 2026-03-09 4/200 2026-03-14 01:19 by JourneyLucky
[考研] 求调剂,一志愿江南大学环境工程085701 +3 Djdjj12 2026-03-10 4/200 2026-03-14 00:31 by JourneyLucky
[考研] 279求调剂 +3 Dizzy123@ 2026-03-10 3/150 2026-03-13 23:02 by JourneyLucky
[考研] 085600调剂 +5 漾漾123sun 2026-03-12 5/250 2026-03-13 22:06 by 星空星月
[考研] 求材料调剂 +5 隔壁陈先生 2026-03-12 5/250 2026-03-13 22:03 by 星空星月
[考研] 0703化学求调剂 +7 绿豆芹菜汤 2026-03-12 7/350 2026-03-13 17:25 by njzyff
[考研] 求b区学校调剂 +3 周56 2026-03-11 3/150 2026-03-13 16:20 by JourneyLucky
[考研] 一志愿华中师范071000,325求调剂 +5 RuitingC 2026-03-12 5/250 2026-03-13 10:43 by hyswxzs
[考研] 化工学硕306求调剂 +9 42838695 2026-03-12 9/450 2026-03-13 10:16 by houyaoxu
[考博] 福州大学杨黄浩课题组招收2026年专业学位博士研究生,2026.03.20截止 +3 Xiangyu_ou 2026-03-12 3/150 2026-03-13 09:36 by duanwu655
[考研] 420求调剂 +4 莫向外求11 2026-03-10 6/300 2026-03-12 14:41 by ruiyingmiao
[考研] 一志愿江南大学085701环境工程专硕总分287求调剂 +5 18266118446 2026-03-09 5/250 2026-03-11 16:51 by 2020015
[考博] 26申博求助 +3 跳跃饼干 2026-03-10 4/200 2026-03-10 21:15 by Tntcnn
[硕博家园] 木虫好像不热闹了,是不是? +4 偏振片 2026-03-10 4/200 2026-03-10 09:51 by longwave
信息提示
请填处理意见