2013-01-23 37 views
0

嗨我有一個三重指針,我想重新分配時,我的原始數組已填滿。出於某種原因,我使用realloc的方式給了我一個seg故障。任何人都有一種感覺,爲什麼?realloc三重指針

double ***matrixn; 
matrixn=(double***) calloc(1,sizeof(double **)); 
for(i=0;i<1;i++){ 
    matrixn[i]=(double**)calloc(3,sizeof(double*)); 
    for(j=0;j<3;j++){ 
     matrixn[i][j]=(double*)calloc(4,sizeof(double)); 
    } 
} 

max_size=1 

接下來的這個部分發生在一個循環內:

max_size+=1; 

matrixn=realloc(matrixn,max_size*sizeof(double**)); 
matrixn[max_size-1]=(double**)calloc(3,sizeof(double*)); 

for (i=0;i<3;i++){ 
matrixn[max_size-1]=(double*)calloc(4,sizeof(double)); 
} 

感謝

+2

一般注意事項:如果使用C編譯器(而不是C++編譯器),請不要強制轉換alloc函數家族的結果。 – paddy

+1

這是C中的語言規定,您不會輸出結果。它是一個'void *',可以直接賦值給另一個類型而不需要強制轉換。 – paddy

+0

如果realloc失敗會發生什麼情況?你已經失去了舊的matrixn,它不是免費的(),因此會泄漏,下一行代碼崩潰,因爲你的新的matrixn是NULL。我建議將realloc的返回值存儲到一個臨時變量中,並決定從那裏做些什麼。 – Sebivor

回答

2

在你的第二個代碼塊的循環,你忘了指數i。它應該看起來像

matrixn[max_size-1][i]=(double*)calloc(4,sizeof(double)); 
+1

好點子=) – paddy

+0

我是個白癡。謝謝! – JupiterOrange