使用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;
}