Ошибка сегментации в программе на C, использующей массив char * и malloc - PullRequest
1 голос
/ 15 декабря 2011

Глупая маленькая C-программа, но я не могу понять, почему у меня возникает ошибка сегментации.Я считаю, что я выделяю достаточно памяти с помощью malloc.Любая помощь приветствуется.Код должен считывать день месяца и строку «напоминания» от пользователя, а затем считывать их в данные, на которые указывают напоминания массива, и выделять пространство памяти с помощью malloc.

Ответы [ 4 ]

3 голосов
/ 15 декабря 2011
    if (reminders[i] = NULL) {

Вы устанавливаете reminders[i] на NULL, прежде чем разыменовываете его.

2 голосов
/ 15 декабря 2011

Страшная опечатка назначения / сравнения! Это подсказка о том, что уровни предупреждений вашего компилятора установлены недостаточно высоко или что вы игнорируете предупреждения.

// Should be '==' not '='
if (reminders[i] = NULL) {
    printf("-- No Space Left --\n");
    break;
}

Кроме того, ваша read_line функция аналогична fgets, что может упростить вещи.

Наконец, всегда проверяйте введенные вами данные. Убедитесь, что scanf возвращает количество элементов, которые вы просили (обычно 1 для простого ввода из одного элемента). В противном случае вы рискуете столкнуться с неопределенным поведением.

1 голос
/ 15 декабря 2011

неправильно:

if (reminders[i] = NULL) {

верно:

if (reminders[i] == NULL) {

также вы объединяете day_str & msg_str, поэтому лучше выделить:

reminders[i] = malloc(2 + strlen(msg_str) + strlen(day_str));
1 голос
/ 15 декабря 2011

Вы делаете назначение в условии if. Должно быть так:

if (reminders[i] == NULL) {
    printf("-- No Space Left --\n");
    break;
}
...