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
работает из какого-то другого каталога.