Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

printf вызывает ошибку Segmentation fault

17K
03 ноября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
Выполнение данного кода всегда заканчивается ошибкой Segmentation fault:
 
Код:
char *pch = NULL;
printf("%s\n", pch);

Если убрать или заменить перенос строки, добавить любой символ слева/справа ошибка не возникает, printf как положено выводит "(null)", однако приведенная форматная строка начинает ругаться с аргументом NULL, на что printf отбрасывает коньки.

Мой компилятор:
gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)
8.8K
03 ноября 2006 года
The_Ice
109 / / 04.04.2006
char *pch = NULL;
printf("%s\n", pch?pch:"null");

а так тебя не устроит?
17K
03 ноября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
[QUOTE=The_Ice]char *pch = NULL;
printf("%s\n", pch?pch:"null");

а так тебя не устроит?[/QUOTE]

Обойти эту ошибку не составляет труда, трудно было обнаружить. Пусть народ знает, какие грабли есть в printf
3
03 ноября 2006 года
Green
4.8K / / 20.01.2000
Это грабли не printf.
Это грабли void* и пр. C-style.
309
04 ноября 2006 года
el scorpio
1.1K / / 19.09.2006
То не "грабли", а так. Зато вот это и "грабли", и "вилы" и весь садовый инвентарь в одном комплекте :D
 
Код:
int Val = 0;
printf("%d%s\n", Val);
2
04 ноября 2006 года
squirL
5.6K / / 13.08.2003
это тоже - просто напросто С-style :)
309
04 ноября 2006 года
el scorpio
1.1K / / 19.09.2006
Дело не в "C-style" - это особенность реализации, присущей всем функциям с переменным числом аргументов - отсутствие какой-либо проверки количества и качества (соответствия типов) передаваемых параметров.
3
05 ноября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=el scorpio]Дело не в "C-style" - это особенность реализации, присущей всем функциям с переменным числом аргументов - отсутствие какой-либо проверки количества и качества (соответствия типов) передаваемых параметров.[/QUOTE]
А это и есть C-style. :)
245
08 ноября 2006 года
~ArchimeD~
1.4K / / 24.07.2006
Пишу свою ОС, поентому printf у меня самописный, но использует стандартные макросы для переменного числа аргументов. Компилю gcc, при загрузке оси комп уходит в ребут. Причина та же?
17K
13 ноября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
[QUOTE=~ArchimeD~]Пишу свою ОС...[/QUOTE]
Круто! Поделись секретом!
245
14 ноября 2006 года
~ArchimeD~
1.4K / / 24.07.2006
Мне интересно, что вызвало такой интерес? В разделе низкоуровневое программирование почти все пишут оси, и мало кого это удивляет.

И ещё хочу поделиться опытом, возможно это и широко известный факт, но я не знал. У меня gcc выкидывает следующий финт ушами:
создаю структуру, два поля по 16 бит. Размер структуры должен по идее равняться 32 битам. Однако между двумя полями у меня появляется ещё одно, тоже на 16 бит, ни как не используемое. Возможно это какое-нибудь выравнивание, или ещё че, но намучился с этим изрядно.
2.1K
14 ноября 2006 года
vectoroc
234 / / 25.07.2006
В VC тоже по дефолту стоит выравнивание на 32 бита. Правда выравнивает вроде только по суммарной длинне структуры
17K
19 ноября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
[QUOTE=~ArchimeD~]...Размер структуры должен по идее равняться 32 битам. Однако между двумя полями у меня появляется ещё одно, тоже на 16 бит, ни как не используемое...[/QUOTE]
У меня такого не было ни разу, единственное предположение - одно из полей является тоже структурой. Например wint_t и cchar_t в <curses.h> на самом деле структуры, хотя судя по названию стандартные "псевдонимы" (typedefы).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог