发生分段错误时,它之前的printf()不会执行。
main()
{
printf( "something" );
statement; //this statement causes a segmentation fault
}
在上面的情况中,为什么printf()没有执行?
所以我需要在这种情况下使用valgrind(在错误语句之前打印所有printf())。
答案 0 :(得分:11)
确保在printf语句中包含换行符"\n"
。通常,至少在UNIX系统中,stdout
是行缓冲的,因此换行符会使该行立即显示。您可能省略了"\n"
(或者您的输出因其他原因未被刷新),这就是您无法看到打印字符串的原因。
另一种选择是在调用fflush(stdout)
后使用printf
自行刷新输出。
答案 1 :(得分:10)
在程序崩溃之前输出流可能无法输出,但您可以通过fflush()刷新输出字节来输出。
我通常会这样做:
if (trace) { fflush(stdout); }
答案 2 :(得分:2)
通过printf()
输出,任何其他标准I / O函数都在标准C库中缓冲。
您需要致电fflush()
以确保在程序崩溃之前将输出发送到tty。