2015-02-11 98 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