尝试使用堆时出错
Error when attempting to use the heap
我编写了一个适用于大多数输入的程序,但如果我要求它通过使用更大的数组(大约 320x320 时我开始发现问题)来提高精度,它就会崩溃。我在网上搜索了我的问题,并找到 this similar problem and this tutorial 如何处理它。我的原始代码中有问题的部分如下 - 我有 precision=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'不能出现在常量表达式中
是因为我正在尝试使用多个索引吗?我该怎么做才能解决我的问题?谢谢!
不要使用new[]
,它只会给你带来痛苦、痛苦、内存泄漏、释放后使用等
这方面你可以用std::vector
。
std::vector<std::vector<int>> lattice_int(precision, std::vector<int>(precision));
无需释放内存。
您的 lattice_int
变量是二维数组。您可以使用以下代码分配它:
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];
}
您必须以相同的方式迭代删除每个子数组。
注意:这只是使用指针创建二维数组的示例。更好的方法是为此使用矢量。
我编写了一个适用于大多数输入的程序,但如果我要求它通过使用更大的数组(大约 320x320 时我开始发现问题)来提高精度,它就会崩溃。我在网上搜索了我的问题,并找到 this similar problem and this tutorial 如何处理它。我的原始代码中有问题的部分如下 - 我有 precision=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'不能出现在常量表达式中 是因为我正在尝试使用多个索引吗?我该怎么做才能解决我的问题?谢谢!
不要使用new[]
,它只会给你带来痛苦、痛苦、内存泄漏、释放后使用等
这方面你可以用std::vector
。
std::vector<std::vector<int>> lattice_int(precision, std::vector<int>(precision));
无需释放内存。
您的 lattice_int
变量是二维数组。您可以使用以下代码分配它:
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];
}
您必须以相同的方式迭代删除每个子数组。
注意:这只是使用指针创建二维数组的示例。更好的方法是为此使用矢量。