主题:[讨论]求助FORTRAN在运行中出现应用程序错误
annawang_728
[专家分:0] 发布于 2011-07-30 09:48:00
用FORTRAN编程时,编译没有警告也没有错误,但是在运行中出现了应用程序错误,不知该如何解决,还请各位能帮帮忙,在下感激不尽啊。具体错误为:
forrt1:severe<157>:Program Exception-access violation
"ox005173e8"指令引用的"0x00000001"内存,该内存不能为"written".
回复列表 (共14个回复)
11 楼
cgl_lgs [专家分:21040] 发布于 2011-08-03 09:49:00
这个是调用栈,代表的是下面的函数(子程序)调用了上面的函数(子程序)。
一般来说是最接近系统库的地方能直接看出问题,但产生问题的地方就不一定了。
是可以逐往下点,多看看,看看是哪儿产生的问题:)
12 楼
annawang_728 [专家分:0] 发布于 2011-08-03 12:27:00
嗯嗯,谢谢您啊~~[em2]
13 楼
annawang_728 [专家分:0] 发布于 2011-08-03 15:28:00
您好,我终于找到问题所在了,就是您所说的是开方出了问题,那个部分程序是这样的:
DO I=1,N
DENOM=SCAL(I)
DYNO=DYNO+(Z1(I)/DENOM)**2+(Z2(I)/DENOM)**2
& +(Z3(I)/DENOM)**2
END DO
DYNO=DSQRT(DYNO/N3)
我查看变量,发现DENOM的值很小,量级是e-5, DYNO的值是NAN,我分析原因会不会是DENOM值太小,然后又在分母上,所以被近似为0了,导致除法出错了呢?我又查看了下前面定义的SCAL变量,它是real类型的。那也就是说DENOM也是real类型的。那为什么会出现这种错误呢?还期待您可以帮忙解决。。。谢谢您了。
14 楼
dongyuanxun [专家分:7180] 发布于 2011-08-03 17:41:00
计算中要时刻避免大数除以小数,你真的会以为计算机中的浮点数表示范围是无限的么?
我来回复