我创建了此函数来动态分配3D数组。
int ***create_3D_Array(int nb_block, int nb_lin, int nb_col) {
int i, j;
int ***A = (int***)malloc(nb_block * sizeof(int**));
for (i = 0; i <nb_col; i++) {
A[i] = (int**)malloc(nb_col * sizeof(int*));
for (j = 0; j < nb_lin; j++) {
A[i][j] = (int*)malloc(nb_lin * sizeof(int));
}
}
return A;
}
然后我在这里使用它
int ***all_blocks = NULL;
all_blocks = create_3D_Array(54, 5, 5);
但是,它不能正常工作,因为当我想给第六个块all_blocks[5]
赋值时,程序停止工作。
我的函数中有错误吗?
尺寸在分配循环中不正确。外循环应运行到nb_block
,第二个malloc应该分配nb_lin * sizeof(int*)
,第三个malloc应该分配nb_col * sizeof(int)
。
此处为更正版本:
int ***create_3D_Array(int nb_block, int nb_lin, int nb_col) {
int i, j;
int ***A = (int***)malloc(nb_block * sizeof(int**));
for (i = 0; i < nb_block; i++) {
A[i] = (int**)malloc(nb_lin * sizeof(int*));
for (j = 0; j < nb_lin; j++) {
A[i][j] = (int*)malloc(nb_col * sizeof(int));
}
}
return A;
}
请注意,使用直接3D数组可能更简单:
int (*all_blocks)[5][5] = malloc(54 * sizeof(*all_blocks));