【发布时间】:2020-12-22 21:48:14
【问题描述】:
我尝试制作一个 4D 数组,如果尺寸 WxXxYxZ 像 W= 7 一样固定,则似乎可以正常工作; X=5, Y=10, Z= 2。但我的代码需要适用于具有可变边框的维度:
int chainCount = 10;
int * beadCount = new int[N];// N >= chainCount
// for example: beadCount = { 5, 7, 8, ... , 12}
//4D array:
double **** r = new double*** [chainCount];
for(int i=0; i < chainCount; i++){
r[i] = new double**[beadCount[i]];
for(int j=0; j < beadCount[i]; j++){
r[i][j] = new double *[chainCount];
for(int k=0; k< chainCount;k++)
r[i][j][k] = new double[beadCount[k]];
}
}
/*
...
*/
for(int i=0; i < chainCount; i++){
for(int j=0; j < beadCount[i]; j++){
for(int k=0; k< chainCount;k++){
delete[] r[i][j][k];
}
delete[] r[i][j];
}
delete[] r[i];
}
delete[] r;
这总是会导致分段错误。但只有当我使用 beadCount[i] 时,通过将 beadCount[i] 替换为固定数字似乎才有效。
【问题讨论】:
-
恭喜你现在是 4 星程序员。我建议您使用
std::vector<std::vector<std::vector<std::vector<int>>>>而不是原始数组定义,并让标准库为您进行必要的内存管理。 -
即使是 4 星编程,也请发布minimal reproducible example,而不仅仅是分配和解除分配的代码。您的描述听起来像是问题出在您没有向我们展示的代码中。用可变数量的项目替换一个常数应该不会导致任何问题。
标签: c++ arrays multidimensional-array dynamic