Сведения о вопросе

Killer

21:06, 1st October, 2020

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

Просмотров: 351   Ответов: 3

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

...
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

В чем может быть проблема?



  Сведения об ответе

darknet

14:50, 29th September, 2020

Естественно ошибка возникает в return (item->next == NULL)? 1: 0;
у вас при вводе 1 в item содержится NULL, а вы пытаетесь его разименовать и обратиться к несуществующему смещению «next»


  Сведения об ответе

KOMP

06:04, 27th September, 2020

А на какой строке ошибка вылетает? Точно в этом куске кода?
Проверил ваш кусок кода на gcc (CentOS) — без ошибок.


  Сведения об ответе

park

14:49, 28th September, 2020

Ну а последний printf вы не видите, потому, что он попадает в буфер и ваша программа сигфолтится до того, как буфер успевает считаться в консоль.

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться