Printf () перед строкой, вызывающей ошибку сегментации, не выполняется - PullRequest
7 голосов
/ 09 августа 2011

Когда происходит ошибка сегментации, printf () до того, как она не выполняется.

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

В вышеописанной ситуации почему printf () не выполняется?

Мне нужно использовать valgrind в таком случае (который печатает все printf () перед ошибочным оператором).

Ответы [ 3 ]

11 голосов
/ 09 августа 2011

Убедитесь, что вы включили новую строку "\n" в свой оператор printf. Обычно, по крайней мере в системах UNIX, stdout буферизуется строкой, поэтому символ новой строки заставляет строку появиться немедленно. Возможно, вы пропустили "\n" (или ваш вывод не сбрасывается по другой причине), и поэтому вы не видите напечатанную строку.

Другой вариант - сбросить вывод самостоятельно, используя fflush(stdout) после вызова printf.

10 голосов
/ 09 августа 2011

Поток вывода может быть не в состоянии выводиться до сбоя программы, но вы можете заставить выводить байты, сбрасывая их с помощью fflush ().

Обычно я делаю это примерно так:

if (trace) { fflush(stdout); }
2 голосов
/ 09 августа 2011

Вывод через printf() и любую другую стандартную функцию ввода-вывода буферизируется в стандартной библиотеке C.

Вам необходимо вызвать fflush(), чтобы убедиться, что вывод передан в tty до сбоя вашей программы..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...