【问题标题】:C - Function to allocate dynamically a 3 dimension array (using malloc)C - 动态分配 3 维数组的函数(使用 malloc)
【发布时间】:2020-08-04 11:06:17
【问题描述】:

我创建了这个函数来动态分配一个 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);

但是,它不能正常工作,因为当我想给我的第 6 个块 all_blocks[5] 赋值时,程序停止工作。

我的函数有什么错误吗?

【问题讨论】:

    标签: arrays function pointers 3d malloc


    【解决方案1】:

    您的分配循环中的尺寸不正确。外循环应该运行到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));
    

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2017-05-29
      • 2013-05-25
      • 2019-01-26
      • 2021-02-03
      • 2015-08-08
      • 2015-02-10
      • 2010-11-27
      • 2019-06-07
      相关资源
      最近更新 更多