当前位置: 首页 > news >正文

指针在访问越界时不崩溃,但是释放的时候发生崩溃,底层原因分析

电脑系统:windows11- vs2013

问题描述:
在工作中,遇到一个棘手的bug,申请一个指针P,在给P赋值或者拷贝操作的时候,访问都是正常的,但是最后释放该指针P时,程序crash了。

固定思维,认为如果越界访问了,指针应该会crash才对,所以没有想到代码中有越界访问的问题;in fact, 指针在vc内部存储空间中的管理,并不是我们需要多少就刚好申请多少。
在这里插入图片描述
如上图所示,荧光绿色是你想申请的8字节的指针p,不管是debug还是release,指针p都是在除了这8字节之外,会有一个指针开始,指针结束的空间,用于指示指针释放的地址范围,当然,vc内部管理中,供程序员申请和释放的内存空间,使用结尾为1去标识,并以16进制存储,也就是说,他会为你的指针分配16的倍数次,好对齐,这样16的整数倍,它的最后一个数1就是标识符了。在不满足为16倍数时,vc系统内部会进行pad填充,这就意味着,也许你虽然申请了8字节,但是实际分配给你的不止8字节,当你越界访问时,不会崩溃,但是会破坏vc对指针分配时的固定的管理格式,而在释放该指针p时,找不到指针结束地址的位置而导致可能删除了我们没有权限访问的地址空间,从而导致程序crash。在代码开发过程中,使用指针的时候需要小心为上!

http://www.xdnf.cn/news/491887.html

相关文章:

  • 【视觉任务】深度估计(Depth Estimation)介绍(2025年更新)
  • 【AT32】 AT32 移植 Freemodbus 主站
  • 亲缘半相合供者
  • 第二十次博客打卡
  • 10G 集成 4 口网口连接器的核心优势
  • FC7300 CAN MCAL 配置引导
  • SVMSPro平台如何获取HLS视频流
  • 差分探头为什么要选择使用屏蔽双绞线
  • DeepSeek基础:PPO、DPO、GRPO概念详解
  • Cursor 中的AI模型到底怎么选 ?
  • 城市综合管廊监测与维护一体化解决方案
  • MinerU本地化部署可视化界面
  • QT6 源(104)篇一:阅读与注释QAction,其是窗体菜单栏与工具栏里的菜单项,先给出属性测试
  • 基于MNIST数据集的手写数字识别(CNN)
  • 产品经理如何做好需求管理
  • 论文浅尝 | HOLMES:面向大语言模型多跳问答的超关系知识图谱方法(ACL2024)
  • 用GPU训练模型的那些事:PyTorch 多卡训练实战
  • 蓝牙AVCTP协议概述
  • 【软考 霍夫曼编码的文档压缩比】
  • 【数据结构】二分查找-LeftRightmost
  • 英语六级备考-阅读篇
  • 25年2月通信基础知识补充2:延迟对齐调制、常见卫星移动速度
  • python中 raise notimplementederror有什么功能,如何使用
  • 类模板的简单实例
  • arxiv等开源外文书数据的获取方式
  • Spring2:应用事务+连接池形成的工具类
  • FC7300 Trigger MCAL配置引导
  • Android应用内存分析与优化 - 工具篇之Booster
  • ThinkStation图形工作站进入BIOS方法
  • 读论文alexnet:ImageNet Classification with Deep Convolutional Neural Networks