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

Jee*_*tel 7 c gcc

发生分段错误时,printf()在它不执行之前.

main()
{
 printf( "something" );
 statement;  //this statement causes a segmentation fault
}
Run Code Online (Sandbox Code Playgroud)

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

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

eci*_*cik 11

确保"\n"在printf语句中包含换行符.通常,至少在UNIX系统中,stdout是行缓冲的,因此换行符会使该行立即显示.你可能省略了"\n"(或者你的输出没有因其他原因被刷新),这就是你看不到打印字符串的原因.

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


Ric*_*d T 10

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

我通常会这样做:

if (trace) { fflush(stdout); }
Run Code Online (Sandbox Code Playgroud)