分段错误(核心转储)

Posted

技术标签:

【中文标题】分段错误(核心转储)【英文标题】:Segmentation Fault(core dumped) 【发布时间】:2013-10-16 10:38:40 【问题描述】:

嘿,伙计们,我得到了这段代码:(我试图读取一个字符串并将其放入输出文件中)

#include "structs.h"
#include <stdio.h>
#include <stdlib.h>
int main () 
  FILE* input = fopen("journal.txt", "r");
  FILE* output = fopen("output.txt", "w");
  char date[9];

  if( ferror(input) || ferror(output) ) 
    perror("Error opening input/output file\n");
  

  fscanf(input, "%s", date);
  fgets(date, 9, input);
  fputs(date, output);
  fclose(input);
  fclose(output);
  return 0;

它编译正确,但在运行时显示错误

 Segmentation fault (core dumped)

我不知道为什么:(请帮忙

【问题讨论】:

如果文件无法打开,fopen 返回 NULL。你还没有检查这个。 如果你在*nix,你可以使用gdb 你为什么先fscanfing 然后 fgetsing 到date 哦该死你是对的 Zeta 愚蠢的我有错误的文件名 -.- 谢谢你 下次在询问前使用调试器 =) 【参考方案1】:

你需要检查fopen是否返回NULL

#include <stdio.h>
#include <stdlib.h>
int main () 
  FILE * input;
  FILE * output;
  char date[9];

  input = fopen("journal.txt", "r");
  if(input == NULL)
    perror("Could not open input file");
    return -1;
  

  output = fopen("output.txt", "w");
  if(output == NULL)
    perror("Could not open output file");
    fclose(input);
    return -1;
  
/* ... snip ... */

您的输入文件可能不存在。在 NULL 上调用 ferror 会导致分段错误。

【讨论】:

【参考方案2】:
 #include <stdio.h>
 #include <stdlib.h>

   int main ()
 
 FILE* input = fopen("journal.txt", "r");
 FILE* output = fopen("output.txt", "w");
 char date[9];

 if(input)
 
   fscanf(input, "%s", date);
    fgets(date, 9, input);
 
else
 
  printf("error opening the file");
 

if(output)

   fputs(date, output);


 else
 
  printf("error opening the file");

 

当您从一个不存在的文件“journal.txt”中读取并调用 Ferror 触发分段错误时,您收到了分段错误。

【讨论】:

以上是关于分段错误(核心转储)的主要内容,如果未能解决你的问题,请参考以下文章

运行我的代码时出现分段错误(核心转储)问题

pyqt5 中的分段错误(核心转储)

编程求解器的分段错误(核心转储)

分段错误(核心转储) - 无法访问的计数器值

我运行程序时出现“分段错误(核心转储)”

在 C++ 中的向量中键入所有值后出现分段错误(核心转储)