1

私はこの奇妙な問題に遭遇しています。基本的に、永遠にループするループがあります。そのループの最初にファイルを開き、ファイルに何かを書き込み、ループの最後にファイルを閉じます。ループの最初の繰り返しでは問題なく動作しますが、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 に精通している人が、ここで何が起こっているのか説明してもらえますか?

4

1 に答える 1

9

fclose は、ファイル ポインタを NULL にしません。ファイルを閉じるだけです。2 回目の反復では、データが NULL ではないため、ファイルは開かれません。

于 2012-05-29T05:04:26.380 に答える