尝试使用堆时出错

时间:2015-06-26 15:14:16

标签: c++ memory dynamic stack heap

我编写了一个适用于大多数输入的程序,但是如果我要求它通过使用更大的数组来提高精度(当我开始遇到麻烦时大约是320x320)它会崩溃。我在网上搜索了我的问题,找到了this similar problemthis 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'不能出现在常量表达式中 是因为我正在尝试使用多个索引吗?我可以做些什么来解决我的问题?谢谢!

2 个答案:

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

您必须迭代删除每个子数组。

注意:这是使用指针创建二维数组的纯粹说明。更好的方法是使用矢量。