首页 文章

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

提问于
浏览
6

发生分段错误时,printf()不会执行 .

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

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

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

3 回答

  • 9

    确保在printf语句中包含换行符 "\n" . 通常,至少在UNIX系统中, stdout 是行缓冲的,因此换行符使该行立即显示 . 您可能省略了 "\n" (或者您的输出因其他原因未被刷新)并且's why you can't看到打印的字符串 .

    另一种选择是在调用 printf 后使用 fflush(stdout) 自行刷新输出 .

  • 10

    在程序崩溃之前输出流可能无法输出,但您可以通过fflush()刷新输出字节 .

    我通常会这样做:

    if (trace) { fflush(stdout); }
    
  • 2

    通过 printf() 输出和任何其他标准I / O功能在标准C库中缓冲 .

    您需要调用 fflush() 以确保在程序崩溃之前将输出发送到tty .

相关问题