如何在低内存条件下在C ++中正确分配内存

时间:2011-08-14 06:34:10

标签: c++ exception memory allocation

我见过资源显示了两种分配内存的方法,同时确保有足够的内存来完成操作。

1)将'new'操作包装在try / catch中,因为它将返回std :: bad_alloc(?)

try { ptr = new unsigned char[num_bytes]; } catch(...) {}

2)在'new'操作后检查指定的指针是否为空。

ptr = new unsigned char[num_bytes]; if(ptr == NULL) { ... }

哪一个是对的?他们都工作吗?我是否需要同时做1和2?

谢谢,

JBU

3 个答案:

答案 0 :(得分:17)

如果您使用引发异常的new的标准实现,那么第一个是正确的。

如果您使用nothrow作为:

,也可以使用第二个
ptr = new (nothrow) unsigned char[num_bytes]; 
if(ptr == NULL) { ... }

答案 1 :(得分:6)

一个不成功的分配[使用new]抛出std::bad_aloc,所以第一个是正确的。

第二个用于c代码,当使用malloc [由于C中没有异常时,NULL用于指示分配失败]。

使用new时,if语句永远不会产生true,因为如果分配失败 - 将抛出异常,并且不会到达if语句。当然,当分配成功时,if语句将产生错误。

答案 2 :(得分:0)

try { ptr = new unsigned car[num_bytes]; } 
catch(std::bad_alloc& e) { cerr << "error: " << e.what() << endl; }

第二个习语更适合malloc