0

私のプログラムはコードのこの部分でクラッシュします:

if(fclose(_device) != SUCCESS){  
    cerr << "Output device library error CLOSING FILE\n";  
    exit(1);  
}  

何も出力しません。代わりに次の行を書くと:

cout << fclose(_device)<<endl;  

どちらも何も出力せず、それ以上のコメントなしでプログラムをクラッシュさせるだけです。

プログラムの前半で、次の行でファイルを初期化しました。

_device = fopen ((char*)filename , "a");  

プログラムがクラッシュする原因は何ですか?

4

2 に答える 2

2

後で開くときに失敗する可能性があります

_device = fopen ((char*)filename , "a");  

_device != NULL であることを確認してください

編集 _device が開かれた後に有効であることを確認しているので、デバッガーを使用して、開くときに _device の値を確認し、それを _fclose に渡される値と比較する傾向があります。興味深いのは、_device がファイルまたは "COM2:" などの通信デバイスを指していることです。これも問題に関係している可能性があるためです。最後に、あなたの最終的な声明を次のように分析します。

int CloseResult = fclose(_device);
if (CloseResult != 0)
  cout << errno << CloseResult << endl;

これは、fclose またはストリームの出力がクラッシュの原因であるかどうかがわからないためです。出力先のストリームが、閉じようとしているファイルにリンクされていないと想定しています;)

于 2011-04-06T11:17:13.487 に答える
2

また、プログラムにバグがあり、メモリがランダムに書き込まれる場合、ファイルを閉じるために fclose が使用する必要がある情報が上書きされる可能性があります。

これが当てはまらないことを確認するには、valgrind などのメモリ チェック ツールを使用してみてください。

于 2011-04-06T11:26:02.263 に答える