C-动态分配3维数组的功能(使用malloc)

问题描述 投票:0回答:1

我创建了此函数来动态分配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]赋值时,程序停止工作。

我的函数中有错误吗?

arrays function pointers 3d malloc
1个回答
0
投票

尺寸在分配循环中不正确。外循环应运行到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));
© www.soinside.com 2019 - 2024. All rights reserved.