Необъяснимая ошибка (Segm.fault 11) с gcc4.2.1 - PullRequest
0 голосов
/ 24 марта 2012

У меня есть действительно простая программа, но она не работает. Кроме того, это вызывает у меня серьезные сомнения относительно хода программы.

Программа выглядит следующим образом (с учетом необходимых заголовков):

main(){
printf("hello1");
printf("hello2");
somefunction();
}

Вывод по меньшей мере специфичен: он возвращает мне только первый printf (hello1), сразу после этого программа завершает работу с ошибкой «Ошибка сегментации 11». Однако , если я удалю 'somefunction ()', второй printf будет ТАКЖЕ показано.

Я имею в виду, что если есть какая-то проблема с моим 'somefunction ()', второй printf () должен отображаться независимо.

Ответы [ 3 ]

5 голосов
/ 24 марта 2012

Ваш somefunction делает что-то неприятное, и процесс останавливается до того, как printf сможет очистить буфер. Вы можете попробовать:

printf("hello1");
printf("hello2");
fflush(stdout);
somefunction();
2 голосов
/ 24 марта 2012

stdout буферизируется в строке.Это означает, что ваш вывод буферизуется где-то для последующей печати, но, поскольку вы somefunction вылетаете, у вас нет возможности распечатать их.

Вы можете очистить буфер, используя fflush:

fflush(stdout);

Или напечатайте новую строку:

main(){
    printf("hello1\n");
    printf("hello2\n");
    somefunction();
}
0 голосов
/ 24 марта 2012

В общем, вы всегда должны ставить \n в конце операторов печати, если вы точно не знаете, что делаете.Это будет гарантировать, что оператор на самом деле делает это на выходе.

printf("hello1\n");
printf("hello2\n");
somefunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...