我正在使用的 Fortran 程序在处理输入文件时遇到运行时错误。
At line 182 of file ../SOURCE_FILE.f90 (unit = 1, file = 'INPUT_FILE.1')
Fortran runtime error: Bad value during integer read
查看第 182 行,我看到一个带有隐式/隐式 DO 循环的 READ 语句:
182: READ(IT4, 310 )((IPPRM2(IP,I),IP=1,NP),I=1,16) ! read 6 integers
183: READ(IT4, 320 )((PPARM2(IP,I),IP=1,NP),I=1,14) ! read 5 reals
格式声明:
310 FORMAT(1X,6I12)
当我在调试器中到达此代码时,NP
其值为 2。I
值为 6,IP
值为 67。我认为应该在循环中重新初始化I
。IP
我的问题是,当我尝试在调试器中单步执行时,一旦我进入 READ 语句,它似乎执行然后抛出错误。我不知道如何阅读它。我尝试进入该函数,但由于我不熟悉 gfortran 库,这似乎是一条艰难的道路。输入文件看起来不错,我认为应该可以正常阅读。这让我觉得这个 READ 语句没有按预期循环。
我对 Fortran 和像这样的隐式 DO 循环完全陌生,但是从我可以收集的内容来看,第 182 行应该根据格式字符串 #310 读取 6 个整数。但是,当我到达时,NP
它的值为 2,这让我认为它只会尝试读取 2 个整数 16 次。
如何调试此读取语句以检查IPPARM
从文件中读取的值?我必须逐步浏览 Fortran 库吗?
任何可以消除我对这些隐式循环的困惑的提示将不胜感激!
谢谢!
注意:我在 Linux 上使用 gfortran/gcc 和 gdb。