189 8069 5689

C++std::nothrow-创新互联

我们知道,当我们写程序时,栈区的内存是非常小的,如果是写那种大型的项目,不够用是很正常的,所以我们需要在堆区申请内存;

企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,成都创新互联公司面向各种领域:塔吊租赁网站设计全网营销推广解决方案、网站设计等建站排名服务。

但是如果在堆区申请了大量的内存,导致没有空间了,那么程序就会崩溃,很烦人;我们做程序,想要的并不是崩溃,因为程序一旦崩溃就代表什么都做不了;我们需要的是如果内存不足,程序不要崩溃掉,返回一个错误或者空地址就行了,我们根据返回值在来进行不同的操作;这就要用到std::nothrow了

以我自己的电脑为例,先在栈区分配内存:

先在栈区申请10 0000*4字节的内存,运行一下,程序正常,并没有崩溃

加大申请空间100 0000*4 看看是否会崩溃掉:

程序出现了异常;

那么我们换一种方式,在堆区申请:

没有问题,那么加大申请空间到1000 0000*4 :

还是没有崩溃,那么继续:

因为堆区内存空间与计算机的物理内存有关,大家计算机申请的大值可能不一样,我这里到5 0000 0000*4就崩溃了,如下:

这里需要注意,弹出如下窗口,或者程序退出代码不为0才叫程序崩溃:

如果你连编译都通过不了,那不叫崩溃,那是语法出错了;程序运行死掉了才叫崩溃,编译都通过不了,肯定是语法问题,如下:

申请了太多了编译是无法通过的;

大家注意,申请堆区空间需要编译通过、循行卡死才能使用我们的std::nothrow 

我这里申请到5 0000 0000*4字节的时候编译能通过,但是一运行就死掉了,很烦

我们可以使用std::nothrow

在new后面加std::nothrow意思就是,如果空间不足,返回nullptr,程序不会崩溃,如下:

可以看到,没有崩溃,那么我们就可以根据返回值,进行业务处理了,如下:

这样就达到我们的目的了,程序也没有崩溃掉;

关于std::nothrow的知识就总结到这里了,感谢观看! 

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:C++std::nothrow-创新互联
网页网址:http://jkwzsj.com/article/dgjdhp.html

其他资讯