内存分配失败错误处理

简介: 一、C语言中的malloc/calloc/realloc/valloc/alloca/memalign函数: 这样的内存分配函数在内存分配失败时都返回空指针,因此,在调用返回时,检查返回值的方法比较简单,只需要与空指针比较即可; 如: char* p =...

一、C语言中的malloc/calloc/realloc/valloc/alloca/memalign函数:

这样的内存分配函数在内存分配失败时都返回空指针因此在调用返回时检查返回值的方法比较简单只需要与空指针比较即可

:

char* p = (char*)malloc(1204)

if(p == NULL)

{

//error handle

}

char* pp = (char*)calloc(31024)

if(pp == NULL)

{

//error handle

}

二、C++中的new操作符:

C++中的new操作符在分配内存失败时默认的操作是抛出一个内置的异常而并不是直接返回空指针这样的话再把返回值与空指针比较就没有什么意义了因为C++抛出异常之后就直接跳出new操作符所在的那一行代码而不再执行后续的代码行了所以对new操作符返回值的判断代码就执行不到了当然标准C++也提供了抑制抛出异常的方法使之不再排除内存分配失败的异常转而直接返回空指针这是因为比较古老的编译器里面可能没有异常处理机制不能捕获到异常:

int* p = new int[SIZE]

if(p == 0) //检查p是否是空指针这个判断没有意义

{

return -1

}

所以在C++中有两种方法来处理new操作符分配内存失败的错误

1、通过捕获new操作符抛出的异常:

char* p = NULL

try

{

p = new char[1024]

}

catch(const std::bad_alloc& ex)

{

//exception handle

return -1

}

2、抑制异常的抛出:

char* p = NULL

p = new(std::nothrow)char[1024] //这样的话如果new分配内存失败就不会再抛出异常而是返回空指针了

if(p == NULL)                    //这样的判断就有意义了

{

//error handle

return -1

}

原文:

http://blog.csdn.net/app_12062011/article/details/7302673

目录
相关文章
|
2月前
|
算法 安全
程序崩溃与优化
程序崩溃与优化
31 0
|
30天前
|
安全 算法 C++
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(三)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
47 0
|
30天前
|
安全 程序员 编译器
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(一)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
65 1
|
30天前
|
存储 安全 NoSQL
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(二)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
37 1
|
8月前
|
数据采集 数据安全/隐私保护
如何使用异常处理机制捕获和处理请求失败的情况
在爬虫开发中,我们经常会遇到请求失败的情况,比如网络超时、连接错误、服务器拒绝等。这些情况会导致我们无法获取目标网页的内容,从而影响爬虫的效果和效率。为了解决这个问题,我们需要使用异常处理机制来捕获和处理请求失败的情况,从而提高爬虫的稳定性和稳定性。
如何使用异常处理机制捕获和处理请求失败的情况
|
Java
编写一个程序,它能导致JVM抛出一个OutOfMemoryError,然后捕获和处理这个异常
编写一个程序,它能导致JVM抛出一个OutOfMemoryError,然后捕获和处理这个异常
174 0
|
存储 Web App开发 JSON
检查自己的代码是否存在内存泄露
造成内存泄露的根本原因就是我们写的代码中存在某些对象长期占用内存,得不到释放,且这个对象占用的内存会逐步增加,导致 v8 无法回收,从而造成的服务的异常和不稳定,甚至是服务的中断和崩溃。
249 0
检查自己的代码是否存在内存泄露
错误处理和异常
错误处理和异常
93 0
|
JavaScript 前端开发 开发者
14、错误处理机制
JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。
114 0