c - 4维数组分配: access violation

标签 c multidimensional-array matrix allocation

我写了这段简单的代码来动态分配一个 4 维数组:

#include <stdlib.h>
#include <stdio.h>

int**** alloc() {

    int i,j,k;
    int ****matrix;
    int x,y,z,n_pairs;

    x= 62;
    y= 45;
    z= 28;
    n_pairs = 4;

    matrix = (int ****) malloc(x*sizeof(int***));

    for (i=0; i<x; i++) {
        matrix[i] = (int ***) malloc(y*sizeof(int**));

        if(matrix[i]==NULL)
            return NULL;

        for (j=0; j<y; j++) {
            matrix[i][j] = (int **) malloc(z*sizeof(int*));

            if (matrix[i][j] == NULL)
                return NULL;

            for (k=0; k<n_pairs; k++) {
                matrix[i][j][k] = (int *)calloc(n_pairs,sizeof(int));

                if (matrix[i][j][k] == NULL)
                    return NULL;
            }
        }
    }

    return matrix;
}


void freeMatrix(int ****m) {

    int i,j,k;
    int x,y,z;

    x= 62;
    y= 45;
    z= 28;


    for(i=0; i<x; i++) {
        for(j=0; j<y; j++) {
            for(k=0; k<z; k++) 
                free(m[i][j][k]);

            free(m[i][j]);
        }

        free(m[i]);
    }

    free(m);
}

int main() {

    int i,j,k,h;
    int ****m = NULL;

    m = alloc();

    for(i=0;i<62;i++)
        for(j=0;j<45;j++)
            for(k=0;k<28;k++)
                for(h=0;h<4;h++)
                    printf("%d\t",m[i][j][k][h]);

    system("pause");

    return 0;
}

问题是当我尝试执行这段代码时,它导致了访问冲突。 这不是分配/释放多维数组的正确方法吗?如果是,那么问题是什么?

最佳答案

这里有一个问题:

        for (k=0; k<n_pairs; k++) { //<----- This should read `k<z'
            matrix[i][j][k] = (int *)calloc(n_pairs,sizeof(int));

您可能打算循环到 z,而不是 n_pairs

关于c - 4维数组分配: access violation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787381/

相关文章:

C - 取消引用术语后的引用

c - 如何验证操作系统是否支持 avx2 指令

根据用户请求创建多个整数

c - 无法从 C 中的其他模块访问 linux 中共享库的自定义全局函数

c++ - OpenGL - GLM 和 GLSL,它们有何不同?

c - C中的二维字符数组初始化

c++ - 我可以从 boost::multi_array<T, 2> 得到 T**(c 风格的二维数组) 吗?

python - 在 numpy 中转置 4 维数组

java - 查找括号是否正确嵌套/对齐 JAVA

c - 将二维数组转换为一维数组