「Cの罠と落とし穴」(PDF)の第5章にある例を見ています。
#include <stdio.h>
main()
{
int c;
char buf[BUFSIZ];
setbuf(stdout, buf);
while ((c = getchar()) != EOF)
putchar(c);
}
残念ながら、このプログラムは微妙な理由で間違っています。問題がどこにあるかを確認するには、バッファが最後にフラッシュされたのはいつかを尋ねます。
回答:メインプログラムが終了した後、ライブラリがオペレーティングシステムに制御を戻す前に行うクリーンアップの一環として、しかしその時点で、バッファはすでに解放されています!
mainは、スタックと変数をクリーンアップする必要がある関数です。しかし、それはどういう意味ですか:バッファはすでに解放されていますか?
理解するのは難しいと思います。誰かがそれを詳細に説明できますか?前もって感謝します。