这是我第一次使用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/