c中的动态3d矩阵创建

Dynamic 3d matrix creation in c

我必须创建一个二维矩阵,并且在每个单元格中我必须放置一个数组,其长度是在函数中计算的,当我尝试以下代码时,它因错误 Segmentation fault (core dumped) 而崩溃。在我看来,矩阵有 N_Sweep 行,N 列,最后一个维度是在函数中计算的。

double ***gamma;
gamma = malloc(N_Sweep*sizeof(double**));
for(i=0;i<N_Sweep;i++){
    gamma[i] = malloc(N_Sweep*N*sizeof(double*));
}
// ...
for(t=0;t<N;t++){
    for(i = 0; i<N_Sweep; i++){
        for(t_M = 1; t_M<(N_Sweep - i); t_M++){
            gamma[i][t] = malloc(sizeof(double) * (N_Sweep-i));
            gamma[i][t][t_M] = 3.0;
        }
    }
}

函数的原型是: void gamma_computation(double ***gamma);

首先你应该在第一个循环中只分配 N * sizeof(double *) 个字节,因为你想要 N 列而不是 N * N_Sweep,同样在第三个嵌套循环中你正在分配矩阵的第三个维度多次(内存泄漏),而您应该在进入循环之前只执行一次。

所以代码应该是:

double ***gamma;
gamma = malloc(N_Sweep*sizeof(double**));
for(i=0;i<N_Sweep;i++){
    gamma[i] = malloc(N*sizeof(double*));
}
// ...
for(t=0;t<N;t++){
    for(i = 0; i<N_Sweep; i++){
        gamma[i][t] = malloc(sizeof(double) * (N_Sweep-i));
        for(t_M = 1; t_M<(N_Sweep - i); t_M++){
            gamma[i][t][t_M] = 3.0;
        }
    }
}