使用 DDD(数据显示调试器)时的 SIGSEGV

SIGSEV while using DDD (Data Display Debugger)

这是我第一次使用 DDD,我对所讨论的主题(unix 环境中的 c)非常缺乏经验,所以我可能会忽略一些东西。 当我尝试从文件进行 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 中给出以下消息:

Program received signal SIGSEGV, Segmentation fault. 0xb7e58e1e in __isoc99_fscanf () from /lib/i386-linux-gnu/lib.so.6

我不知道是什么导致了这个问题。提前致谢!

I can't figure out what might be causing this issue.

在调试器中查看 fp 的值。它将是 NULL.

您应该始终检查您调用的每个系统函数的return值。

the file is in the same directory as the executable

没关系。重要的是当您调用 fopen.

时,您的 当前 目录是什么

除非您指示 DDD 更改到 config.txt 所在的目录,否则 DDD 可能是来自其他目录的 运行。