VS C ++在bad_alloc异常后不释放内存

时间:2016-03-04 14:02:03

标签: c++ visual-studio-2013 out-of-memory

使用Visual Studio 2013 C ++,我有一个程序,在某些情况下可能会耗尽内存。我捕获bad_alloc异常并删除分配的内存。再次分配此内存后,将抛出bad_alloc异常,就好像根本没有释放内存一样。

捕获了第一个异常并执行了删除操作。第二个例外是在new.cpp中通过带有注释的语句抛出"报告没有内存"

在这里的例子中,当执行main()中的最后一个语句时抛出异常:

#include <vector>
#include <stdexcept>

using namespace std;

struct Object {
    char Data[10000];
};

vector<Object*> OutOfMem;

void GetOutOfMemory()
try{
    while( true ){
        Object *O{ new Object };
        O->Data[0] = '#';
        OutOfMem.push_back( O );
    }
}
catch( const std::bad_alloc &Ex ){
    for( auto o: OutOfMem )
        delete o;
}

int main(int argc, char *argv[])
{
    GetOutOfMemory();

    Object *O{ new Object };
    OutOfMem.push_back( O );

    return 0;
}

0 个答案:

没有答案