0

嗨,我正在编写一个 C++ 程序,其中包含一个消耗太多不必要内存的循环,以至于计算机在到达终点之前就死机了……

这是这个循环的样子:

float t = 0.20;
while(t<0.35){
    CustomClass a(t);
    a.runCalculations();
    a.writeResultsInFile("results_" + t);
    t += 0.001;
}

t如果相关,该程序是一个物理模拟,我希望从中获得称为温度的外部参数的几个值的结果。似乎内存过剩是由于没有“释放”我的类实例从循环的一次执行到下一次所占用的空间,我认为如果在不使用指针或new指令的情况下创建它是自动的。我尝试使用类的析构函数来做到这一点,但它没有帮助。可能是因为我的类的主内存使用是一个用新指令定义的二维数组吗?

精确,似乎上面的代码不是问题(感谢那些指出这一点的人)所以这就是我如何CustomClass在其构造函数中启动我的数组(通过 my 中的最大对象):

tab = new int*[h];
for(int i=0; i<h; i++) {
    tab[i] = new int[v];
    for(int j=0; j<v; j++) {
        tab[i][j] = bitd(gen)*2-1; //initializing randomly the lattice
    }
}

bitd(gen)是一个随机数生成器,输出10

而且,我的CustomClass对象的另一种方法通过以下方式将数组的大小加倍:

int ** temp = new int*[h];
for(int i=0; i<h; i++) {
    temp[i] = new int[v];
    for(int j=0; j<v; j++) {
        temp[i][j] = tab[i/2][j/2];
    }
}
delete[] tab;
tab = temp;

有没有可能我应该释放指针temp

4

1 回答 1

4

你在泄漏内存。

有没有我应该释放指针温度?

不。在为双倍大小的新数组分配内存并复制内容后,您应该释放tab指向的内存。现在,您只是删除了指针数组,delete [] tab;但每个指针指向的内存都丢失了。运行一个循环并删除每个。只有这样才行tab = temp

更好的是,使用为您处理内存管理的标准容器,这样您就可以忘记处理原始指针并专注于您的实际工作。

于 2013-10-09T13:50:42.793 回答