現在問題が発生しています
*** glibc detected *** ./efit: free(): invalid next size (fast): 0x00000000006127f0 ***
エラーが発生した通常のメモリ マップとバックトレース情報を使用しglibc
ます。ただし、この問題の原因を見つけることができません。これが発生するまでに、(基本的に)私のプログラム全体が終了しているようです。私がオンラインで読んだことの1つは、これは解放の欠如が原因である可能性があるということです.
現在、いくつかの配列の割り当てを解除せずにプログラムを実行しています (割り当て解除はメモリ リークを引き起こす可能性があるという印象を受けましたが、これは実行中のプログラムのパフォーマンスと効率にのみ影響します)。今、プログラムを新たに起動すると、このエラーが発生します。
配列の割り当てを解除せずにプログラムを以前に実行したことが、書き込みしようとしている以前の実行から解放されていないメモリがあるという意味で、「私を悩ませに戻ってくる」可能性はありますか?
そうでない場合、このエラーに完全に混乱しています。どこを見始めるべきか、および/またはそれを見つけるためにデバッグする方法についての手がかりはありますか?
価値があるので、gfortranを使用してコンパイルしています
EDIT:コンパイルオプションは最初はこの問題を直接特定しませんでしたが、それを取り除くのに役立ちました. i はループ内で整数変数iat
forを使用していましたが、数行後、の境界内で別の整数を記述していると考えられました。配列の境界外の配列を参照していました。コンパイル オプションによってリストされたいくつかの警告を修正したところ、このエラーはエラーのより明確な説明に変わりました: .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
説明に変更することでした。