用两种方法,编写产生和处理内存耗尽异常的程序。
当我们利用new函数申请比较大的空间时,由于系统内存资源有限,不一定能满足需求。针对这种情况,常规的错误处理认为在new失败时会返回NULL,从而形成如代码清单17.1所示的处理方法。
如果在Microsoft Visual C++6.0环境下运行上述代码,会产生类似下面的运行结果:
Allocated 100000000 doubles in ptr[0]
Allocated 100000000 doubles in ptr[1]
Memory allocation failed for ptr[2]
输出显示程序在new失败前只进行了两次成功空间分配,循环就结束了。根据实际使用的计算机的物理内存、系统为虚拟内存分配的磁盘空间的不同,都会使输出结果有所不同。
但是同样的代码在Code::Blocks环境下运行时,却会产生类似下面的运行结果:
Allocated 100000000 doubles in ptr[0]
Allocated 100000000 doubles in ptr[1](www.daowen.com)
terminate called after throwing an instance of'std::bad_alloc'
what(): std::bad_alloc
这说明Code::Blocks在new失败时抛出bad_alloc异常而不是返回NULL。
代码清单17.2给出采用异常处理的方法。
上述代码在CodeBlocks环境下运行,会产生类似下面的运行结果:
Allocated 100000000 doubles in ptr[0]
Allocated 100000000 doubles in ptr[1]
Exception occurred:std::bad_alloc
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。