博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存分配失败错误处理
阅读量:7201 次
发布时间:2019-06-29

本文共 950 字,大约阅读时间需要 3 分钟。

一、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

你可能感兴趣的文章
【dotnet跨平台】微软昨天宣布正式发布.NET Core RC2和.NET Core SDK Preview 1,还有Entity Framework Core RC2...
查看>>
介绍一个好用的软件--多个WIN远程连接
查看>>
探索不一样的ERP 在云端的企业管理平台
查看>>
也聊老朋友:诺基亚的归来
查看>>
频频发力 5G,英特尔在下一代技术上都做了什么?
查看>>
DOM
查看>>
Nginx学习笔记(一) Nginx架构
查看>>
【数据结构之旅】稀疏矩阵的快速转置
查看>>
LLDB使用以及技巧
查看>>
C语言指针传递详解
查看>>
[翻译] JTNumberScrollAnimatedView
查看>>
Groovy语法介绍
查看>>
玩转2048,不如搞定2048
查看>>
第一米店Diyimi.net 域名交易
查看>>
IOS中表视图(UITableView)使用详解
查看>>
Lua talbe's pairs & ipairs & traverse loop, table.pack and table.unpack
查看>>
主机使用wifi时,虚拟机的网络配置
查看>>
摩托罗拉移动被谷歌视为保单 预防与三星关系破裂
查看>>
本地存储—localStorage(HTML5)
查看>>
常见时间复杂度排行
查看>>