嗨我有一個三重指針,我想重新分配時,我的原始數組已填滿。出於某種原因,我使用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));
}
感謝
一般注意事項:如果使用C編譯器(而不是C++編譯器),請不要強制轉換alloc函數家族的結果。 – paddy
這是C中的語言規定,您不會輸出結果。它是一個'void *',可以直接賦值給另一個類型而不需要強制轉換。 – paddy
如果realloc失敗會發生什麼情況?你已經失去了舊的matrixn,它不是免費的(),因此會泄漏,下一行代碼崩潰,因爲你的新的matrixn是NULL。我建議將realloc的返回值存儲到一個臨時變量中,並決定從那裏做些什麼。 – Sebivor