考虑以下场景,我通过多次实例化同一个对象来强制std::bad_alloc
异常,直到程序内存不足(使用这些值,循环在我的机器终止之前循环大约5019次):
#include <iostream>
using namespace std;
class myhash{
int* table;
public:
myhash(int size){
table = new int[size];
}
};
int main(){
for (int i=0; i<100000; i++){
cout<<i<<endl;
myhash* H = new myhash(100000);
}
}
如何阻止程序终止,我该如何做呢?我想,使用delete
,在实例化下一个对象之前,将释放每个对象分配的内存,这样就可以在我想要的时候运行这个循环。但是,在将循环更改为:
for (int i=0; i<100000; i++){
cout<<i<<endl;
myhash* H = new myhash(100000);
delete H;
}
程序仍然崩溃,而且它几乎没有影响它在崩溃之前运行的周期数。这是什么原因,以及解决这个问题的正确方法是什么?
答案 0 :(得分:5)
向您的班级添加析构函数:
~myhash()
{
delete[] table;
}
delete H;