C++ c++;fgets分段故障(堆芯倾倒)

C++ c++;fgets分段故障(堆芯倾倒),c++,fgets,C++,Fgets,包含以下代码段的完整代码集编译时不会出现任何错误。然而,当我运行可执行文件时,当执行第401行时,我收到一个错误“分段错误(内核转储)” 我做了一些调试,我知道“真实”文件名在第397行被调用,我已经确认“cur_step_buff”是4096 另外,请让我知道是否需要更多的代码来帮助解决这个问题 代码如下: 393: FILE *fd; 394: char fd_name[512]; 395: strcpy(fd_name,npb_list[freq][app][thread].file_na

包含以下代码段的完整代码集编译时不会出现任何错误。然而,当我运行可执行文件时,当执行第401行时,我收到一个错误“分段错误(内核转储)”

我做了一些调试,我知道“真实”文件名在第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;
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;
393:FILE*fd;
394:char fd_name[512];
395:strcpy(fd_名称,npb_列表[freq][app][thread]。文件名);
396:fopen(fd_名称,“r”);

397:cout您可能打算将某些内容分配给
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: 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;
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;
393:FILE*fd;
394:char fd_name[512];
395:strcpy(fd_名称,npb_列表[freq][app][thread]。文件名);

396:fd=fopen(fd_名称,“r”);//没错,这就是为什么我投票决定结束这场比赛。没有什么可以提供给未来的读者。第401行末尾的“fd”应该是“fd_name”吗?我按照上面的建议做了,现在我有一个编译错误:错误:无法将参数“3”的“char*”转换为“FILE*{akaIOFILE*”,转换为“char*fgets(char*,int,FILE*)”。我可以让程序工作了,请参见下面的答案