Задать вопрос

Вопрос по программе на Си

Есть следующий кусок кода

...
int main(int argc, char* argv[])
{
int act, act2, value;

printf("Выберите действие:\n1. Вывод списка\n2. Добавить элемент в список\n0. Выйти из программы\n->");
scanf("%d", &act);

printf("Введенное значение:\n%d\n", act);
...
}


Если вводим «1» — выполнение программы почему то завершается, выводится сообщение «Ошибка сегментирования»
В любом другом случае — всё ок.

Если пишем int act = X, act, value; аналогично — если X == 1, то «Ошибка сегментирования», иначе — всё Ок.

Компилятор gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5

В чем может быть проблема?
  • Вопрос задан
  • 2628 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
VBart
@VBart
Естественно ошибка возникает в return (item->next == NULL)? 1: 0;
у вас при вводе 1 в item содержится NULL, а вы пытаетесь его разименовать и обратиться к несуществующему смещению «next»
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Dzuba
@Dzuba
А на какой строке ошибка вылетает? Точно в этом куске кода?
Проверил ваш кусок кода на gcc (CentOS) — без ошибок.
Ответ написан
VBart
@VBart
Ну а последний printf вы не видите, потому, что он попадает в буфер и ваша программа сигфолтится до того, как буфер успевает считаться в консоль.

Если сделаете fflush(STDOUT) после printf("+"), то "+" увидите.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы