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

Dan*_*lin 0 c++ memory exception

考虑以下场景,我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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能做这样的事情,同时阻止程序终止?我想,使用delete,每个对象分配的内存将在实例化下一个之前被释放,从而可以在我想要的时候运行这个循环.但是,在将循环更改为:

for (int i=0; i<100000; i++){
    cout<<i<<endl;
    myhash* H = new myhash(100000);
    delete H;
}
Run Code Online (Sandbox Code Playgroud)

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

Sid*_*d S 5

在你的类中添加一个析构函数:

~myhash()
{
    delete[] table;
}
Run Code Online (Sandbox Code Playgroud)

你会被召唤 delete H;