今天组内调来了一个架构组的大牛,结果一来就给我的代码找出了一个问题。唉,还是学艺不精啊。
问题如下:通常我们在使用C++的new的时候,都是这样用的:

初看起来似乎没有问题,我们来做个测试,测试代码如下:

执行结果如下:

可见当new操作符申请不了内存的时候,并不会返回NULL,而是直接异常了。所以代码应该如下:


可见,程序捕捉的到了异常,并正常退出。

在centos6上测试了一下,发现会直接显示 “已杀死”,无法捕获这个异常,也就是说这种异常会直接导致程序结束。

小细节通常引发大问题,有些东西确实不能想当然啊……

另外说明一点,C++里面是没有finally的哦~
(以上代码均由window下g++ 3.4.5编译通过)

通过引用计数解决野指针的问题(C&C++)

C/C++代码中,野指针问题历来已久,当然,大家都知道new/delete要成对出现: C++ A *p = new A(); delete p; p = NULL; ...

阅读全文

5则回应给“C++中new申请内存失败的正确处理”

  1. turygo说道:

    老版本的编译器在new失败的情况下面的确是会赋值null的,不过那个已经是很久以前的事情鸟,现在如果想让一开始的代码正常工作,可以使用new(std::nothrow)来代替new

    [回复]

    Dante 回复:

    刚测试过,果然如此;多谢tury指教~~~

    [回复]

  2. greenerycn说道:

    MSDN详解:http://msdn.microsoft.com/en-us/library/kftdy56f%28VS.71%29.aspx

    另一份资料
    不要让内存分配失败导致您的旧版 STL 应用程序崩溃
    http://www.microsoft.com/china/msdn/library/security/LegacySTLFix.mspx?mfr=true

    [回复]

    Dante 回复:

    呃,因为在linux下开发,所以现在很少用微软的IDE……

    [回复]

    Dante 回复:

    不过还是谢谢分享啊~~~~

    [回复]

发表评论