• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言new操作的安全性分析

C语言new操作的安全性分析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言new函数,c语言new,c语言 new delete,c语言new用法,c语言中new等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

对于学习过C语言的朋友应该都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到new上,那可就不一定正确了。我经常看到类似这样的代码:

int * p = new int [MAXSIZE]
if (p == 0) // 检查p指针是否为空
return -1;
//other code

</div>

其实,这里的 if ( p == 0 ) 完全没有意义的。C++ 里,如果 new 分配内存失败,默认是抛出异常的。所以,如果分配成功,p == 0 就绝对不会成立;而如果分配失败了,也不会执行 if ( p == 0 ),因为分配失败时,new 就会抛出异常跳过后面的代码。如果你想检查 new 是否成功,应该捕捉异常:

try
{
int * p = new int [MAXSIZE]
}
catch( bad_alloc & exp)
{
cerrr<<exp.what()<<endl;
}

</div>

但是 有的程序员并不习惯捕捉异常,标准C++也提供了一种方法不抛出异常而返回空指针。

int * p = new (std::nothrow)int [MAXSIZE]
if (p == 0) // 检查p指针是否为空
return -1;
//other code
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言new操作的安全性分析

相关文章

  • 2017-05-28关于STL中vector容器的一些总结
  • 2017-05-28STL区间成员函数及区间算法总结
  • 2017-05-28堆排序算法(选择排序改进)
  • 2017-05-28将正小数转化为2-9进制小数的实现方法
  • 2017-05-28基于C/C++ 常见误区详解
  • 2017-05-28C++动态内存分配(new/new[]和delete/delete[])详解
  • 2017-05-28探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题
  • 2017-05-28C++ COM编程之接口背后的虚函数表
  • 2017-05-28C++中MFC Tab Control控件的使用详解
  • 2017-05-28C++函数中return语句的使用方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++中的const和constexpr详解
    • 《C++ primer plus》读书笔记(三)
    • 快速解决boost库链接出错的问题(分享)
    • C语言中查找字符在字符串中出现的位置的方法
    • C++变位词问题分析
    • 从txt中读入数据到数组中(fscanf)的实现代码
    • 举例讲解C语言的fork()函数创建子进程的用法
    • 深入const int *p与int * const p的区别详解(常量指针与指向常量的指针)
    • C++线程同步实例分析
    • C++中用指向数组的指针作函数参数

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有