导致分段错误的行之前的Printf()不会执行

时间:2011-08-09 18:04:33

标签: c gcc

发生分段错误时,它之前的printf()不会执行。

main()
{
 printf( "something" );
 statement;  //this statement causes a segmentation fault
}

在上面的情况中,为什么printf()没有执行?

所以我需要在这种情况下使用valgrind(在错误语句之前打印所有printf())。

3 个答案:

答案 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。