安全的使用new分配内存
来源:互联网 发布:淘宝知识产权申诉 编辑:程序博客网 时间:2024/06/05 05:56
C++早期版本的new在失败时会返回NULL,但新版本不是这样。这不利于严格的内存检查,可能会造成隐患。安全的做法是:
#include <new>
……
char *pch=new(std::nothrow)char[1000000000];
if(pch==NULL)
{
//错误处理
}
为了方便使用,还可以定义下面的宏:
#define sfnew new(std::nothrow)
接下来使用sfnew就能保证在new失败时能得到NULL,以便做相应的错误处理。该方法在windows、Ubuntu、Android均通过了验证。
执行这样的测试片段,
{
char *pch=(char*)1;
printf("testpch=%p.",pch);
pch=new(std::nothrow)char[500000000000];
printf("testpch=%p.",pch);
}
可用看到超量分配内存失败的时候,new返回了NULL。
另一种安全的new应用相对比较繁琐,就是在所有使用new的地方采用try-catch捕获错误。阅读全文
0 0
- 安全的使用new分配内存
- c++:动态内存分配(new和delete的使用)
- 使用new,delete实现内存分配联系
- C++学习10:使用new分配内存
- _msize() 返回 new 分配内存的大小
- new分配的内存一定在堆上么?
- new分配内存的详细解释
- new分配内存
- C++内存分配new
- C++ new内存分配
- new内存分配失败
- java new 内存分配
- c++内存分配优先使用内存池,而不是new,delete
- c++内存分配优先使用内存池,而不是new,delete
- 类和动态内存分配,类成员的动态内存分配,new,delete,定位new
- C++[类设计] 一个使用new动态内存分配的集合类
- 内存分配:new的三种方法-new expression、operator new和placement new
- 使用new和delete[]进行动态内存分配和释放
- js setTimeout 和 setInterval
- 今日头条的style类和权限
- 通过HttpServletResponseWrapper获取到返回body
- Spark RDD基础操作
- 编译器与解释器的区别
- 安全的使用new分配内存
- mysql数据库设置远程连接权限
- hexo安装next主题的步骤
- Python
- Kylin报错classnotfound:org.apache.hadoop.hive.serde2.typeinfo.typeInfo
- Java垃圾回收机制
- 转载:管道通信总结
- html5中新增两个表单属性,分别autocomplete和novalidate属性
- jmeter 请求发送加密参数(其中包含Json嵌套)