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;
}
}
}
我必须创建一个二维矩阵,并且在每个单元格中我必须放置一个数组,其长度是在函数中计算的,当我尝试以下代码时,它因错误 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;
}
}
}