c ++ fgets分段错误(核心转储)

c++ fgets Segmentation fault (core dumped)

包含以下代码片段的完整代码集编译无任何错误。但是,当我 运行 可执行文件时,我在执行第 401 行时收到错误 "Segmentation fault (core dumped)"。

我做了一些调试,我知道 "real" 文件名在第 397 行被调用,我已经确认 "cur_step_buff" 是 4096。

此外,如果需要更多代码来帮助解决此问题,请告诉我。

代码如下:

393: FILE *fd;
394: char fd_name[512];
395: strcpy(fd_name,npb_list[freq][app][thread].file_name);
396: fopen( fd_name, "r");
397: cout << "fd_name = " << fd_name << "\n";
398: char cur_step_buff[4096];
399: cout << sizeof(cur_step_buff) << "\n";
400: cout << “location line 400\n”; 
401: fgets (cur_step_buff, sizeof cur_step_buff, fd);
402: int isEnd=0;
403: int last_step=0;

您可能打算将某些内容分配给 fd。可能是fopen(fd_name, "r");

的结果

原来 fd/fopen 没有在第 396 行初始化

下面修改后的代码允许我的程序 运行:

代码如下:

393: FILE *fd;
394: char fd_name[512];
395: strcpy(fd_name,npb_list[freq][app][thread].file_name);
396: fd = fopen( fd_name, "r"); // <<- change made to this line
397: cout << "fd_name = " << fd_name << "\n";
398: char cur_step_buff[4096];
399: cout << sizeof(cur_step_buff) << "\n";
400: cout << “location line 400\n”; 
401: fgets (cur_step_buff, sizeof cur_step_buff, fd);
402: int isEnd=0;
403: int last_step=0;