0

这是我第一次使用 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 中给出以下消息:

程序收到信号 SIGSEGV,分段错误。来自/lib/i386-linux-gnu/lib.so.6的__isoc99_fscanf()中的0xb7e58e1e

我无法弄清楚可能导致此问题的原因。提前致谢!

4

1 回答 1

0

我无法弄清楚可能导致此问题的原因。

在调试器中查看fp. 会的NULL

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

该文件与可执行文件位于同一目录中

那没关系。重要的是当您调用时您的当前fopen目录是什么。

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

于 2017-11-26T18:12:38.377 回答