2015-02-11 94 views
0

我想读取一个整数文件,其中包含文件中整数的数量作为第一个整数,但是当我在读取文件后尝试关闭文件时,出现seg错误。fclose上的Seg错误?

我读过,如果文件指针为空,而您尝试关闭它,则会发生段错误。然而,我检查它是否为空之前关闭它,它不为空,它仍然给我一个seg故障..

我跑过GDB,一旦fclose(fp)执行,它seg故障。

这是怎么回事?

这里是我的代码:

  char *mode = "r"; 
      int numsToRead = 0; 
      FILE *fp = fopen(inputFile, mode); 

      if (fp == NULL){ 
        fprintf(stderr, "Can't open input file!\n"); 
        exit(1); 
      } 

      int *temp; 
      int index = 0; 
      // Get number of integers (first integer) 
      fscanf(fp, "%d", &numsToRead); 
      fprintf(stdout, "nums to read: %d\n", numsToRead); 

      integers = (int*)malloc(sizeof(int) * numsToRead); 
      for(int i = 0; i <= numsToRead; i++){ 
        int currInt; 
        if(fscanf(fp, "%d", &currInt) == 1) 
          integers[i] = currInt; 
        else 
          break; 
      } 
      if(fp != NULL) 
      fclose(fp); 
+0

'我<= numsToRead'应该是'I dasblinkenlight 2015-02-11 02:24:23

+0

你的“整数”声明在哪里?没有声明,它会默认为'int',而不是'int *'。 – 2015-02-11 02:24:43

+1

不要施放'malloc'的结果! – 2015-02-11 02:28:33

回答

1
for(int i = 0; i <= numsToRead; i++) 
//    ^^ 

应该

for(int i = 0; i < numsToRead; i++) 
//    ^
+1

@JayB,显示它的声明和文本文件的内容。 – 2015-02-11 02:28:05

+0

@CoolGuy Nevermind,在我的代码中的其他错误。 – JayB 2015-02-11 02:35:32