使用三級指標 char *** 動態配置三維陣列,嘗試用 strcpy(table[0][0], "num") 複製字串,程式發生段錯誤(Segmentation Fault)。
malloc 配置的記憶體塊之間不保證連續,無法像靜態陣列 arr[i][j][k] 那樣直接索引。Create3DActiveArray 內的 pArr 是區域指標,函數返回後棧框銷毀,導致回傳指標指向無效記憶體。for (j = 2; j < y; j++) 應為 j = 0,導致部分指標未初始化。改用「指標的指標」層層配置,並透過 char **** 輸出參數將配置好的記憶體位址帶回 main:
void Create3DActiveArray(char ****pArr, int x, int y, int z)
{
*pArr = (char ***)malloc(x * sizeof(char **));
char ***p3 = *pArr;
for (int i = 0; i < x; i++) {
*p3 = (char **)malloc(y * sizeof(char *));
char **p2 = *p3;
for (int j = 0; j < y; j++) {
*p2 = (char *)malloc(z * sizeof(char));
char *p1 = *p2;
for (int k = 0; k < z; k++) {
*p1 = 0;
p1++;
}
p2++;
}
p3++;
}
}
int main() {
char ***table;
Create3DActiveArray(&table, 2, 2, 4);
strcpy(*(*table), "num"); // 等同 table[0][0]
printf("%s\n", *(*table));
// 釋放記憶體...
return 0;
}
依反向順序逐層 free,並將指標設為 NULL 避免野指標。
多維動態陣列需注意記憶體連續性、指標生命週期與索引正確性。建議優先考慮一維陣列模擬多維,或使用 C++ std::vector 簡化管理。