我编写了一个适用于大多数输入的程序,但是如果我要求它通过使用更大的数组来提高精度(当我开始遇到麻烦时大约是320x320)它会崩溃。我在网上搜索了我的问题,找到了this similar problem和this tutorial如何处理它。我原始代码中有问题的部分如下 - 我有精度= 320和holepop = 770。
double spacing = 2.0/(precision+1);
int lattice_int[precision][precision];
for (i=0; i<precision; ++i){
for (ii=0; ii<precision; ++ii){
mindist_sq = 2.0;
lattice_int[i][ii] = 0;
for (iii=0; iii<holepop; ++iii){
xdist = abs(xcoord[iii] + 1.0 - spacing/2 - spacing*i);
ydist = abs(ycoord[iii] - 1.0 + spacing/2 + spacing*ii);
thisdist_sq = xdist*xdist+ydist*ydist;
if (thisdist_sq < mindist_sq){
lattice_int[i][ii] = dint[iii];
mindist_sq = thisdist_sq;
}
}
}
}
我尝试用前两行中的这个更改来修复它:
int * lattice_int;
double spacing = 2.0/(precision+1);
lattice_int = new int[precision][precision];
(我还在最后输入“delete lattice_int [] [];”但是,我收到了这个错误:'precision'不能出现在常量表达式中 是因为我正在尝试使用多个索引吗?我可以做些什么来解决我的问题?谢谢!
答案 0 :(得分:3)
不要使用new[]
,它只会导致您的痛苦,痛苦,内存泄漏,释放后使用等。
您可以在这方面使用std::vector
。
std::vector<std::vector<int>> lattice_int(precision, std::vector<int>(precision));
无需释放内存。
答案 1 :(得分:0)
您的lattice_int
变量是2d数组。您可以使用以下代码分配它:
int precision = 500;
int ** lattice_int;
double spacing = 2.0/(precision+1);
lattice_int = new int*[precision];
for (int i = 0; i < precision; i++)
{
lattice_int[i] = new int[precision];
}
您必须迭代删除每个子数组。
注意:这是使用指针创建二维数组的纯粹说明。更好的方法是使用矢量。