我目前遇到问题
*** glibc detected *** ./efit: free(): invalid next size (fast): 0x00000000006127f0 ***
带有通常的内存映射和回溯信息glibc
错误。但是,我无法找到这个问题的原因。看起来(基本上)我的整个程序在发生这种情况时已经完成了。我在网上读到的一件事是,这可能是由于缺乏释放造成的。
现在,我一直在运行该程序,而没有释放一些数组(我的印象是释放可能会导致内存泄漏,但这只会影响程序运行时的性能和效率)。现在,当我重新启动程序时,我遇到了这个错误。
我以前执行的程序没有释放数组的情况是否有可能“回来困扰我”,因为我试图写入的先前执行中存在未释放的内存?
如果不是,我对这个错误完全感到困惑。关于我应该从哪里开始查找和/或我应该如何调试以找到它的任何线索?
就其价值而言,我正在使用 gfortran 进行编译
编辑:
虽然编译选项一开始并没有直接识别出这个问题,但它帮助我解决了这个问题。我使用的是整数变量iat
for iat=1,natoms
in a do
循环,然后几行之后,我想iat
描述了范围内的不同整数1,natoms
。我正在引用数组边界之外的数组。当我更正编译选项列出的一些警告时,此错误变成了对该错误的更清晰的描述:Fortran runtime error: Index '7' of dimension 1 of array 'isnormed' above upper bound of 6
.
是什么让这个错误第一次没有出现?编译警告告诉我的我所做的唯一更改是更改read(fout, '(a)'), line100' to
read(fout, '(a)') line100' (删除逗号)并更改旧式字符描述character*100 line100
到较新的character(100) line100
描述。