我運行在程序的問題,我不知道如何解決它。我正在處理一個文件,爲此我使用ftell獲得大小並將其存儲在M_size中。之後,我用N聲明一個無符號的char指針數組。然後在兩個函數a()和b()中使用該數組。C中的分段錯誤,同時聲明大指針數組
...
unsigned long N = (M_size/ x);
int LstElemSize = M_size % x;
if(LstElemSize != 0){
N += 1;
}
unsigned char *ptr_M[N]
a(ptr_M)
b(ptr_M)
...
函數A()實際上初始化ptr_M的每個元件在一個for循環:
a(){
int i;
for(i = 0; i < N-1; i ++){
ptr_M[i] = malloc(sizeof(unsigned char) * x);
}
}
函數B()迭代然後在每個元件,並且計算的東西,並在端部的每個元素被釋放。
我現在的問題是,當我嘗試處理文件例如1 GB的數組大小將在4 000 000左右,並出現分段錯誤(在我聲明我的數組)。如果我正確計算出它是8字節(字符指針)乘以4 000 000 = 32 MB。運行該程序的服務器有足夠的內存來保存該文件,但我想Response 1中提到的堆棧空間不夠。
我能做些什麼來解決我的問題?增加我的堆棧空間?謝謝!
你試圖在堆棧上創建一個32MB的數組?堆棧通常在單位數字的MB範圍內,在使用VC++的Windows上,默認值僅爲1MB。 – 2014-09-26 18:23:26