在Valgrind下没有出现的GFortran内存错误

时间:2015-07-29 13:36:04

标签: debugging fortran valgrind

我正在尝试运行一些似乎存在内存问题的遗留Fortran代码。

我不是一个强大的程序员,从来没有写过一系列的fortran。

偶尔在我的Mac上,程序SIGABRTs在一些输入上但在大多数输入上它的工作正常。但是,在我的Ubuntu机器上,它总是SIGABRT甚至可以在Mac上正常工作的文件上。

为了尝试追踪问题,我在Ubuntu机器上使用valgrind运行程序。

valgrind ./a.out

瞧,当程序在valgrind下运行时,它运行完全没有任何问题。很奇怪,对吗?

运行时收到的错误消息sans-valgrind:

 Within subroutine domdecision
 END OF ROUTINE 
*** Error in `./a.out': free(): invalid size: 0x0000000031043e80 ***

Program received signal SIGABRT: Process abort signal.

Backtrace for this error:
#0  0x7FD269195777
#1  0x7FD269195D7E
#2  0x7FD268AE6D3F
#3  0x7FD268AE6CC9
#4  0x7FD268AEA0D7
#5  0x7FD268B23F23
#6  0x7FD268B301FD
#7  0x40C807 in domdecision_ at gnm-domdecomp.f:434
#8  0x404B2F in domdecomp_ at gnm-domdecomp.f:226
#9  0x40F9A5 in MAIN__ at gnm-domdecomp.f:47

gnm-domdecomp.f的第433-434行是:

real*8 dist,tdist
 -        ,wt(nmax),temp,ut(nmax,nmax)

看起来就像数组计算。

所以我的问题是,1。可能的错误是什么,2。为什么它会在某些机器上和valgrind下消失,以及3.接下来我应该怎么做才能调试这个?

0 个答案:

没有答案