内存分配失败错误处理
一、C语言中的malloc/calloc/realloc/valloc/alloca/memalign函数:
这样的内存分配函数在内存分配失败时都返回空指针,因此,在调用返回时,检查返回值的方法比较简单,只需要与空指针比较即可;
如:
char* p = (char*)malloc(1204);
if(p == NULL)
{
//error handle;
};
char* pp = (char*)calloc(3,1024);
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;
}
内存分配失败错误处理相关推荐
- 又一次内存分配失败(关于overcommit_memory)
1.问题现象和分析: 测试时发现当系统中空闲内存还有很多时,就报内存分配失败了,所有进程都报内存分配失败: sshd@localhost:/var/log>free t ...
- kmalloc使用不当导致内存分配失败问题
1.介绍 本文记录分析驱动模块kmalloc接口的flags参数使用不当,导致分配内存失败的问题,主要记录了分析过程和给出的解决方法. 1.1背景介绍 在对spi nand flash进行读写老化,因 ...
- python内存分配失败_关于python:如何避免[Errno 12]无法分配使用子进程模块导致的内存错误...
完整的工作测试案例 当然,根据您在本地和远程计算机上的内存,您的阵列大小会有所不同. z1 = numpy.random.rand(300000000,2); for i in range(1000) ...
- keilcjson内存分配失败_iOS标准库中常用数据结构和算法之内存池
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Linux编程点击右侧关注,免费入门到精通! 作者丨欧阳大哥2013https://www.jianshu.com ...
- c语言链表内存分配失败,链表的C语言实现之动态内存分配
链表的C语言实现之动态内存分配 來源:互聯網 2008-06-01 02:05:07 評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...
- 计算机可用内存分配失败,你们都被忽悠了! 其实可用内存大才有用
[PConline 杂谈]随着这几年安卓手机的硬件快速升级,手机的运行内存(本文后续页面将"运行内存"简称为内存或者RAM)也越来越大,从最初的512M到1GB,再到现在主流的2G ...
- 计算机可用内存分配失败,安装内存和实际可用内存不一样什么原因
通常我们安装内存条时候都有显示具体内存,但是有时出现安装内存和实际可用内存不一致?为什么会不一样呢?下面我们一起来看看其中的原因和解决方法. 一.你安装的不是64位Win7系统 Win7 32位只能识 ...
- C语言malloc动态分配内存分配失败怎么办?exit(OVERFLOW);(include <cstdlib>)
如:(见<大话数据结构>147页) QueuePtr s = (QueuePtr)malloc(sizeof(QNode)); if(!s){exit(OVERFLOW); } exit为 ...
- 【 C 】动态内存分配实用案例(二)之复制字符串
用动态分配内存制作一个字符串的一份拷贝.注意:调用程序应该负责检查这块内存是否分配成功,这样做允许程序以任何它所希望的方式对错误作出反应. #nclude <stdlib.h> #incl ...
最新文章
- 线段树练习 3P3372 【模板】线段树 1
- 使用CoreOS及Docker搭建简单的SaaS云平台
- 初探linux子系统集之led子系统(一)【转】
- python基础小白题2
- C语言判断某个字符串中 是否存在子字符串
- 计算机视觉基础---OpenCV框架与图像插值算法(图像伸缩)cpp+python
- MYSQL基础八--子查询和连接
- oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战
- Linux 下安装Postgresql
- python多进程间通信
- Redhat linux 5 Server相关介绍
- (转)区块链创造了ICO,但是无法守护ICO
- asp.net中如何解决4M以上文件的上传
- hls ask 调制
- 叶聪:朋友圈爆款背后的计算机视觉技术与应用
- 服务器怎么预防常见的网络攻击
- 计算机junit测试类,复利计算器4.0之再遇JUnit
- 【GIT】git常用命令
- Unity教程之-Unity游戏技能Skill系统架构设计
- 北大四大“疯人院”到底有多牛?天才、怪才在这儿遍地都是!