new、delete需要注意的一个特性

正常情况new一个数组之后,用delete释放是没有问题的。但是当对new得到的堆区进行越界的写入操作(读操作不会)将会导致delete时出现段错误,无法进行删除。如下面的程序所示:


数组大小只有16,但是我们却访问了下标为20的数组中的元素,数组越界了。


(CRT detected that the application wrote to memory after end of heap buffer)

引用CSDN博主「白夜行的狼」的原创文章中的一段:

我是在做华为的面试题时用到了一个危险函数,导致了越界写入,然后delete失败。那什么是危险函数呢,简单地说 就是有一些字符串处理函数、输入输出流函数,它没有进行越界检测,哪怕被写入数组已经越界仍然会继续写入。 举个例子,比如

char* strcpy(char* dest, char* src);

这个函数是从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回dest的指针。如果dest指向的内存没有足够大小去存放src字符串怎么办?strcpy函数可不管这些,它会继续进行复制,霸道的进行越界写入!

现在问题已经很清楚了吧,如果你对了new到的堆使用了危险函数,将导致段错误。当然,如果是直接声明存放在栈区的数组进行这样的越界操作,也会导致如下错误

(Stack around the variable ‘data’ was corrupted)

原文链接:https://blog.csdn.net/u013834525/article/details/82884313

C++的new、delete需要注意的一点:使用危险函数导致的越界CRT detected that the application wrote to memory after end of heap相关推荐

  1. Qt开发奇葩问题总集

    Qt开发奇葩问题总集[持续更新中] 文章目录 Qt开发奇葩问题总集[持续更新中] 说明: 使用 QColorDialog 控制台出现提示 :x: Qt 运行程序控制台 自动输出 CUserInputP ...

  2. GFlags调试堆中野指针

    我个人觉得写代码最悲哀的就是,程序的出错结果往往出人意料,并不在自己预期的错误列表中,其中堆中的野指针就是一个很隐蔽的问题.记得之前写了一个模块,后来因为功能升级,而修改了部分接口,等到运行的时候,老 ...

  3. 关于delete和delete[]

    [精彩] 求问delete和delete[] 的区别?? http://www.chinaunix.net/jh/23/311058.html C++告诉我们在回收用 new 分配的单个对象的内存空间 ...

  4. C++ 之new和delete释放内存

    C++ -释放内存(new和delete) C++动态分配和释放内存 @c.biancheng.net/view/206.html 在C语言中,动态分配内存用 malloc() 函数,释放内存用 fr ...

  5. android jni new/delete 和 new[]/delete[]

    今天,简单讲讲android里再jni使用new时如何释放内存. 这个其实是和C++有关的知识,不过jni编程时还是需要注意的.所以这里记录一下. new 和 delete 到底是什么? 如果找工作的 ...

  6. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

  7. 深入理解javascript 中的 delete(转)

    在这篇文章中作者从<JavaScript面向对象编程指南>一书中关于 delete 的错误讲起,详细讲述了关于 delete 操作的实现, 局限以及在不同浏览器和插件(这里指 firebu ...

  8. 浅谈 C++ 中的 new/delete 和 new[]/delete[]

    来自:http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过 ...

  9. C++ new与delete的使用规范

    C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间.在使用new和delete时,注意以下原则. 1.new与delete需一一对应 用ne ...

最新文章

  1. java 类爆炸_Java 封装与类
  2. 如何在Java中使用Lombok删除样板安装程序获取器
  3. [渝粤教育] 南通职业大学 混合动力汽车构造与检修 参考 资料
  4. unity text不能刷新_Unity使用ComputerShader实时压缩RT!
  5. html 文本框 初始化,Flutter 文本框初始化时显示默认值
  6. 他患“不死癌症” 坐轮椅考上清华并获特等奖学金
  7. linux 调优系列
  8. 2020快手汽车行业数据价值报告
  9. 如何解决Office 2010安装报错1907,没有足够权限注册字体?
  10. DigitalClock的替代者TextClock
  11. 性能测试 - 响应 vs 延迟 vs 吞吐量 vs 负载 vs 扩展性 vs 压力 vs 健壮性
  12. 实参可以是任意类型吗_传递任意数量的实参
  13. mysql 存储过程 光标_mysql存储过程 光标
  14. white-space 空白处理、强制内容不换行,word-wrap 文本自动换行,text-overflow 文本溢出
  15. 详细的设计文档该怎么写?请注意这些地方...
  16. typedef用法总结
  17. root登陆mysql怎么登_怎么登录 mysql
  18. R语言plot函数参数合集
  19. 修改this指向的方法
  20. 软件附加截图功能(QQ,360浏览器)

热门文章

  1. [转]阿里开源低代码引擎LowCodeEngine
  2. 各个 Android Gradle 插件版本所需的 Gradle 版本
  3. PDF.js开发笔记
  4. 【ArcGIS微课1000例】0023:ArcGIS将地理照片(无人机照片)转为点(航迹)案例教程
  5. ArcGIS 10.7 模型构建器Model Builder空间建模流程化作业案例----影像拼接与掩膜裁剪
  6. Androd之在图片右上角显示红色圆圈里面数字提醒
  7. Android之二维码扫描的总结
  8. 耶鲁大学计算机科学录取,2020年耶鲁大学排名TFE Times美国最佳计算机科学硕士专业排名第18...
  9. python自动注册邮箱_[转][Python][自动登录163邮箱]
  10. python框架django文档_Django基础——Django框架介绍及模板语言