嗨,我正在编写一个 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)
是一个随机数生成器,输出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
?