分段错误 - C语言

时间:2015-12-05 00:51:16

标签: c segmentation-fault

我正在编写一个C程序,它读取一个充满字符的文本文件。它读取文本文件并将每个char放入char数组中。 (我稍后将使用顶点/边缘指针来完成其他任务)。在程序的这个阶段,我只是试图从文本文件中打印char字符数组,但我得到了“分段错误”

要注意,此程序使用jGrasp运行,但在PICO中使用相同的代码时出现此错误。

发生错误的时候:

typedef struct edgetag{             //edge structure

   vertex* v;
   struct edgetag* q;

}edgetag;

      if(counter == 2){                                     //if counter == 2, make an edge

      int l = 0;
      while(l < 100){

         if(vertices[l].c == text[j]){                      //find what vertex needs the edge
         (*theVertex) = vertices[l];
         l = 100;

         }

         l++;

      }

     edgetag* e = (edgetag*)malloc(sizeof(edgetag));   //SEGMENTATION FAULT SEEMS TO LIE HERE (SIZEOF??)

      (*e).v = theVertex;                             //the edges vertex is equal to the last read vertex
      (*e).q = NULL;

以下是我的大部分计划:

menu_selection

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

MikeCat的评论是对的,您应该在while循环中添加i的检查。

您的分段错误可能是由于文件要大而存储在char [100]中引起的。 char [100]表示文件中的字符不超过100个。

这样的事情可能会解决你的问题:

while(fgets(input, 2, file)){

    if(input[0] == 'A' || input[0] == 'B' || input[0] == 'C' || input[0] == 'D' || input[0] == 'E' || input[0] == 'F' || input[0] == 'G' || input[0] == 'H' || input[0] == 'I' || input[0] == 'J' || input[0] == 'K' ||
       input[0] == 'L' || input[0] == 'M' || input[0] == 'N' || input[0] == 'O' || input[0] == 'P' || input[0] == 'Q' || input[0] == 'R' || input[0] == 'S' || input[0] == 'T' || input[0] == 'U' || input[0] == 'V' ||
       input[0] == 'W' || input[0] == 'X' || input[0] == 'Y' || input[0] == 'Z'){
        if(i < 100){
            text[i] = input[0];
            i++;
        }else{
            // File is too big! Do something to handle the error
            break;
        }
    }
}