尝试使用堆时出错

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];
}

您必须以相同的方式迭代删除每个子数组。

注意:这只是使用指针创建二维数组的示例。更好的方法是为此使用矢量。