使用 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
可能是来自其他目录的 运行。
这是我第一次使用 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
可能是来自其他目录的 运行。