嗨,我正在编写一个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)
是输出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
?
你正在泄漏内存。
难道我应该释放指针温度吗?
不。为双倍大小的新数组分配内存并复制内容后,应释放tab
指向的内存。现在,您只删除了带有delete [] tab;
的指针数组,但每个指针指向的内存都会丢失。运行循环并删除每个循环。只有这样才能tab = temp
.
更好的是,使用为您处理内存管理的标准容器,这样您就可以忘记弄乱原始指针,而是专注于您的实际工作。