私はこの奇妙な問題に遭遇しています。基本的に、永遠にループするループがあります。そのループの最初にファイルを開き、ファイルに何かを書き込み、ループの最後にファイルを閉じます。ループの最初の繰り返しでは問題なく動作しますが、2 回目の繰り返しでは問題なく動作します
*** glibc detected *** ./prog: double free or corruption (top):
fclose(data)
これを、ループの 2 回目の反復中の行に絞り込みました。どうやらこのエラーは、何かを複数回解放しているときに発生するようですが、このコードではどのように可能ですか?
while(1)
{
if (data == NULL)
{
data = fopen(data_path, "w+");
}
/* do a bunch of stuff... */
if (data != NULL)
{
fclose(data);
}
}
奇妙なことにfclose(data)
、プログラムが問題なく正常に実行された後に次の行を追加すると、次のようになります。
data = NULL;
私よりも C に精通している人が、ここで何が起こっているのか説明してもらえますか?