C++ bad_alloc类的使用实例

1. bad_alloc类存在于#include<new>头文件中;不过一般用户使用时无需要包含<new>头文件,运行也没问题,不知哪里间接的包含进行去了,未深入去研究这个问题,有知道的可以告知我一下,谢谢!

2. 例子(在vs2015上运行过)

 


#include <iostream>

using namespace std;

int main() 
{

    int *a = nullptr;
    int j = 1;
    try
    {
        for(;;)
        {
            a = new int[1000000];
            //cout << "j = " << j++ << endl;
        }

        cout << "hello wrold 1 !!!" << endl;//异常后这句话应该不会运行到,说明CPU的使用权交给了异常处理函数

    }catch (float fEx)
    {
        cout << "float fEx = " << fEx << endl;
    }
    catch (int iEx)
    {
        cout << "float iEx = " << iEx << endl;
    }
    catch (bad_alloc &bE)
    {
        //cout << "new is fail 111" << bE.what()<<endl;

       if(a != nullptr)

      //1)如果new失败,new不会调用构造函数,这里应该不用运行到,但是这里确认会进去,不太了解为什么?

       //2)以后再研究吧,我没有去查过资料,不过应该是new失败时,没有调用new的构造函数,所以此次if(a!=nullptr)中的a上

      //3)次成功时的指针,同时,这里的释放也有问题,因为有无数个new给a,这里只为了演示bad_alloc,不思考代码的严谨

       //4)性,这里只释放了一个a指针即一次内存,还有N个内存泄露了。 

       {

           delete a;

           a = nullptr;

           cout<<"这里可以运行到吗!?"<<endl;

       }
        cout << "new is fail 111" << endl;
        cout << "new is fail 111" << endl;
        cout << "new is fail 111" << endl;
    }

cout<<"hello world 2 !!!"<<endl;//此句也不会输出

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值