SIGSEV при использовании DDD (Data Display Debugger)

Это мой первый раз, когда я использую DDD, и я не очень разбираюсь в предмете (c в среде Unix), так что я могу что-то упустить. Я получаю ошибку сегментации, когда пытаюсь выполнить fscanf из файла, чего не происходит при обычной компиляции gcc. Функция следующая:

void read_config(){
    FILE *fp;
    fp = fopen("config.txt","r");
    fscanf(fp,"TRIAGE=%dDOCTORS=%dSHIFT_LENGTH=%dMQ_MAX=%d ",&data.triage,&data.doctors,&data.shift,&data.mq_max);
}

и после прочтения строки fscanf выдает следующее сообщение в DDD:

Программа получила сигнал SIGSEGV, Ошибка сегментации. 0xb7e58e1e в __isoc99_fscanf () из /lib/i386-linux-gnu/lib.so.6

Я не могу понять, что может быть причиной этой проблемы. Заранее спасибо!

1 ответ

Решение

Я не могу понять, что может быть причиной этой проблемы.

Посмотрите в отладчике на значение fp, Это будет NULL,

Вы всегда должны проверять возвращаемое значение каждой системной функции, которую вы вызываете.

файл находится в том же каталоге, что и исполняемый файл

Это не имеет значения. Важно то, какой у вас текущий каталог, когда вы звоните fopen,

Если вы не проинструктированы DDD перейти в каталог, где config.txt проживает, шансы DDD работает из какого-то другого каталога.

Другие вопросы по тегам