なぜ使う必要があるのか、使わないのかわかりfflush()
ません。
私のプログラムは現在セグフォールトしていて、printステートメントでデバッグしています。プログラムがsegfaultを実行すると、stdout
そのバッファは自動的にフラッシュされませんか?
fflush()を使用する必要がある場合と使用しない場合がある理由がわかりません。
stdio
バッファがフラッシュされることもあれば、フラッシュされないこともあります。たとえば、印刷物に「\ n」を含めるだけで、通常はフラッシュされます(stdout
端末に接続すると、デフォルトでラインバッファリングされるため)。
プログラムがsegfaultを実行すると、stdoutはそのバッファを自動的にフラッシュしませんか?
Stdioバッファはによってフラッシュされexit
ます。シグナル(などSIGSEGV
)がプロセスを強制終了する場合、exit
は呼び出されません。バッファをフラッシュせずにプロセスを終了する別の方法stdio
は、Unix固有の呼び出しを使用すること_exit
です。
いいえ、なぜそうすべきですか。プログラムはオペレーティングシステムによって強制終了されます。セグメンテーション違反が発生した場合、プログラムは意味のある状態ではなくなるため、その時点で安全に実行できるのは、即時終了以外のことはありません。
(そして、誰ものシグナルハンドラーを登録しようとしないでくださいSIGSEGV
。)
「このコードでfflush(stdout)が呼び出される理由がわかりません。この行にコメントしようとすると、動作はまったく同じでした。」
その出力が改行で終わっていない場合、前のprintf()出力が表示されることが保証されていないためです。
基本的に、改行なしでプロンプトを表示している場合にのみ必要であり、ユーザーがそれを表示できるようにする必要があります。
このサイトを参照してください。