delete数组引发的core分析
2024-10-16 19:33:58
delete [] ptr 引发了singnal 6 abort的core错误,跟踪过程发现写入ptr大量数据,引发内存越界,破坏了new数组的尾部数据保护,导致delete的时候core。
问题分析过程写了一段测试代码,发现另外一些编辑器或者说操作系统的性质,new申请的数组总是分配2的n次方的空间,比如char* ptr = new char[10]实际分配了16个字节的空间 ,char* ptr2 = new char[15]同样分配了16个空间的字节,而char* ptr3 = new char[16]则分配了32个字节的空间,由此推测new出来的数组尾部有一个字节的特殊字符用于保护。
虽然找到core的原因,但还是对系统new和delete的内存分配有所不理解:char* ptr = new char[10]的时候写入17个字符至ptr,delete [] ptr并不会core;写入29个字符至ptr,delete [] ptr引发signal6 abort的core;对内存申请的头部和尾部数据保护还是没搞清楚。
最新文章
- PHP如何使用GeoIP数据库
- android基础(六)android的消息处理机制
- Spring声明式事务管理基于@Transactional注解
- 09_IO流
- 使用 JavaScript 实现栈
- 百度地图API 学习网站
- Clearing Search Values
- Linux学习之路:变量值的删除、替代和替换
- JS获取TextArea和Input的同步值
- T-SQL表联接查询
- 如何设置Java虚拟机内存以适应大程序的装载
- HDU 1535 Invitation Cards(SPFA,及其优化)
- Linq to SQL 简单的增删改操作
- ASP.NET如何通过后台数据库提供的链接播放视频(不使用外置插件)
- Java8虚拟机内存模型
- qt 程序中执行额外程序和脚本
- Css的前世今生
- JavaScript中HTML DOM focus()与onblur() setSelectionRange()用法
- 在Windows Azure上创建ASP.NET MVC网站
- composer - No business network has been specified for this connection 解决方案