C ++中的内存管理:在循环中创建对象而不会使程序崩溃

时间:2018-04-10 22:03:22

标签: c++ exception memory

考虑以下场景,我通过多次实例化同一个对象来强制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;
}

程序仍然崩溃,而且它几乎没有影响它在崩溃之前运行的周期数。这是什么原因,以及解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

向您的班级添加析构函数:

~myhash()
{
    delete[] table;
}

delete H;

时会调用它