处理由第三方库中的内存不足引起的崩溃

时间:2013-08-20 22:35:11

标签: c++ memory exception-handling

如果使用new动态分配大量内存,程序可能会崩溃,因为new返回NULL。使用异常,可以捕获std :: bad_alloc并做最合适的事情:

try{
     allocate_much_memory();                
catch( std::exception e){       
     do_something_that_fits();  
}

如果由于某种原因无法使用例外,则需要检查NULL

BigBlob* allocate_much_memory(){
   BigBlob *bblob = new BigBlob();
   if( bblob == NULL ){
        std::cerr << "uh-oh" << std::endl;
        handle_error();
   }
   return bblob;
}

关键是,据我所知,您必须自己编写NULL检查。 如果由于来自第三方库而无法更改功能,并且您不使用例外,您可以做什么?

更新:对于我正在检查new BigBlob()的结果是否为NULL的部分:没有必要:请参阅Do I need to check for NULL after p = new Fred()? 和{ {3}}

1 个答案:

答案 0 :(得分:1)

如果他们抛出异常,你就到这里:

Global exception handling in C++

如果他们不这样做,你就会被冲洗。

这也是有原因的。想一想。你怎么知道这个库中的分配在哪里?你会对失败做些什么?最后一个特别重要。除了崩溃,你会做什么?