24小时热门版块排行榜    

查看: 2246  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 投票:  有多少人是今天查系统知道结果的? +12 爱看书的可乐 2026-08-26 14/700 2026-08-26 13:50 by coolysnow
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +4 yuleib84 2026-08-26 5/250 2026-08-26 13:40 by yuleib84
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +6 process2012 2026-08-23 8/400 2026-08-26 11:03 by zjlp
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 出来了 +8 trojank 2026-08-26 8/400 2026-08-26 09:00 by gxc
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 范进中举一文的中心思想 +8 炎黄贵胄 2026-08-22 9/450 2026-08-26 07:47 by WASM
[基金申请] 2026国自然函评费到账 +21 羊腰板 2026-08-21 24/1200 2026-08-26 07:20 by finnigan
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 有没有大神帮我看看基金代码 28+4 1234567wang 2026-08-24 10/500 2026-08-25 19:15 by lfy8008
[基金申请] 放榜前的不淡定 20+4 snowwithsea 2026-08-19 19/950 2026-08-25 17:57 by chick875
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[基金申请] 人气不行了 +11 fansofjerry 2026-08-21 11/550 2026-08-25 11:04 by 孤独的英雄6
[基金申请] 让我中一个面上吧! +13 大萍1987 2026-08-20 16/800 2026-08-24 10:23 by 太傻了
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
信息提示
请填处理意见