2016-02-16 105 views
0

我試圖從.txt文件中讀取一堆int並將它們存儲在內存中。但是,下面的代碼中的fscanf()行在我嘗試運行它時會導致分段錯誤。我已經確認`fopen()工作正常。任何想法我應該做什麼?謝謝你的幫助。fscanf導致段錯誤

#include <stdio.h> 
#include <stdlib.h> 




void load_file(FILE* file, int** p); 

int main() 
{ 

    FILE* f1; 
    f1 = fopen("twenty-five-ints.txt", "r"); 
    int p=0; 
    int* k = &p; 
    load_file(f1, &k); 
    return 0; 
} 

void load_file(FILE* file, int** p) { 

    int number = 0; 
    int i = 0; 
    while (fscanf(file, "%d", &number) != EOF) { 
     *(*p + i) = (int) fscanf(file, "%d", &number); 
     i++; 
    } 

} 
+1

如果您確認'fopen'工作正常,爲什麼沒有任何錯誤檢查? – fuz

+1

你有一個'int'的數組。您需要實際分配一些內存來存儲您從文件中讀取的值。 – user3386109

回答

1

的問題是在

*(*p + i) = (int) fscanf(file, "%d", &number); 

你通過一個單一的int的地址,你的指針prerforming arithmatic opeation把它超出了使用的存儲器。訪問該內存調用undefined behavior

分段故障是UB的副作用之一。

也就是說,FWIW,沒有理由將fsacnf()的返回值轉換爲int

2

在您的代碼中,p指向一個指向單個整數的指針。您只有足夠的空間來存儲單個整數,嘗試存儲第二個或第三個整數可能會導致您觀察到的崩潰。

0

將p分配爲大小爲25的數組,並將每個元素初始化爲零。

這應該可以解決問題