分段故障问题

avd*_*avd 10 c io segmentation-fault unbuffered-output

我观察到有时在C程序中,如果我们printf在分段错误之前的任何地方都有代码,它就不会打印.为什么会这样?

Kre*_*dns 20

这是因为printf()缓冲输出.您可以fflush(stdout);立即添加printf,然后打印.

你也可以这样做:

fprintf(stderr, "error string");
Run Code Online (Sandbox Code Playgroud)

因为stderr没有缓冲.

还有一个相关的问题.


pav*_*ium 5

如果在printf之后过早发生分段错误,并且未刷新输出缓冲区,则不会看到printf的效果.


Fal*_*ina 5

大多数libc实现缓冲printf输出.将换行符(\n)附加到输出字符串以强制它刷新缓冲区内容通常就足够了.

  • 这还不够.你需要调用fflush(); (3认同)