我目前遇到了一个问题,如果我得到
*** glibc detected *** ./efit: free(): invalid next size (fast): 0x00000000006127f0 ***
glibc
带有通常的内存映射和错误附带的回溯信息。但是,我无法找到此问题的原因。似乎(基本上)我的整个程序在发生这种情况时已经完成。我在网上读到的一件事是,这可能是由于缺乏释放。
现在,我一直在运行程序而没有释放我的一些数组(我的印象是释放会导致内存泄漏,但这只会影响程序运行时的性能和效率)。现在,当我重新启动程序时,我遇到了这个错误。
是否有可能我之前执行的程序没有释放我的数组是“回来困扰我”,因为我试图写入的之前的执行中有未释放的内存?
如果不是,我完全被这个错误弄糊涂了。关于我应该从哪里开始寻找和/或我应该如何调试以找到它的任何线索?
对于它的价值,我正在使用 gfortran 编译
编辑:虽然编译选项一开始并没有直接识别出这个问题,但它帮助我减少了它。我在循环中使用了一个整数变量iat
,然后几行之后,我认为是在. 我正在引用数组边界之外的数组。当我更正了您的编译选项列出的一些警告时,这个错误变成了对错误更清晰的描述:.iat=1,natoms
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
描述。