c - 在 c 中创建动态 3d 矩阵
问题描述
我必须创建一个二维矩阵,并且在每个单元格中我必须放置一个数组,其长度在函数中计算,当我尝试以下代码时,它会因错误而崩溃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;
}
}
}
推荐阅读
- javascript - 如何检查角度 8 中的刷新页面事件并显示一个对话框,要求用户重新加载或取消操作
- php - SQL Query 在一个参数中给出错误的输出
- python - 从 yatra.Com 的日期选择器中选择日期
- java - 如何在 JAVA 中使用立陶宛语特殊字母
- unit-testing - 如何在 azure Devops 中安装 Cobertura?
- java - 如何从 Antlr4 语法在控制台上打印一些东西
- ignite - 当 Ignite 服务器上已经有配置时,在 Ignite 客户端上具有相同的配置
- sql-server - 如何根据条件在T-SQL select语句中执行where子句
- google-cloud-platform - 如何流式传输存储在谷歌云存储桶上的视频?
- linux - 在 Ubuntu 16.04 中无法在没有 sudo 用户的情况下运行 Docker 命令