这是我第一次使用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,分段故障。 0xb7e58e1e in
  来自/lib/i386-linux-gnu/lib.so.6的__isoc99_fscanf()


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

最佳答案

我不知道是什么原因导致了这个问题。


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

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


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


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

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

关于c - 使用DDD(数据显示调试器)时的SIGSEGV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47498028/

10-13 09:43