在循环执行之间释放内存



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

下面是这个循环的样子:

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

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

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

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

你正在泄漏内存。

难道我应该释放指针温度吗?

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

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

最新更新