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

时间:2017-11-26 15:55:40

标签: c unix segmentation-fault scanf ddd-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 in   来自/lib/i386-linux-gnu/lib.so.6的__isoc99_fscanf()

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

1 个答案:

答案 0 :(得分:0)

  

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

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

您应该始终检查您呼叫的每个系统功能的返回值。

  

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

那没关系。当您致电fopen时,重要的是您的当前目录。

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