嗨我正在编写一个包含循环的C ++程序,这个循环消耗了太多不必要的内存,以至于计算机在到达终点之前就冻结了......
以下是此循环的样子:
float t = 0.20;
while(t<0.35){
CustomClass a(t);
a.runCalculations();
a.writeResultsInFile("results_" + t);
t += 0.001;
}
如果相关,该程序是一个物理模拟,我希望从中获得温度为t
的外部参数的几个值的结果。似乎内存过剩是由于没有“释放”我的类实例从循环的执行到下面的空间,我认为如果在不使用指针或new
的情况下创建它将是自动的指令。我尝试用类的析构函数来做它,但它没有帮助。可能是因为我的类的主要内存使用是用一个新指令定义的二维数组吗?
精确,似乎上面的代码不是问题(感谢指出这一点的人)所以这里是我如何在其构造函数中启动我的数组(由我CustomClass
中的最大对象): / p>
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)
是一个输出1
或0
的随机数生成器。
此外,我的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
?
答案 0 :(得分:4)
你正在泄露记忆。
有没有我应该释放te指针temp?
没有。为新大小的double数组分配内存并复制内容后,应释放tab
指向的内存。现在,您只是删除了带有delete [] tab;
的指针数组,但每个指针所指向的内存都将丢失。运行循环并删除每个循环。只有这样做tab = temp
。
更好的是,使用为您处理内存管理的标准容器,这样您就可以忘记搞乱原始指针并专注于您的实际工作。