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

C++内存泄漏--**关于“异常0xc0000005 读取的位置 0xDDDDDDDD时发生冲突”

C++中,很多方式可以引起内存泄漏,譬如如下代码:

class RefClass
{
public:RefClass(int n_){pInt = new int(n_);}~RefClass(){if(NULL != pInt){delete pInt;pInt = NULL;}}int* pInt = NULL;
};/*检查*p_n_是否为0,是的话,通过删除p_n_,间接删除ref_class_->pInt
*/
void checkPtr(RefClass* ref_class_, int*& p_n_)
{if(*p_n_ == 0){delete p_n_;  //删除指向的内存p_n_ = NULL;  //置NULL}return;
}void main()
{RefClass* _pRefClass = new RefClass(0);int* _p_n = _pRefClass->pInt;checkPtr(_pRefClass, _p_n);delete _pRefClass; //析构类对象,会造成内存泄漏
}

运行上述程序,会发生内存泄漏。删除内存的操作很规范

delete p_n_;  //删除指向的内存p_n_ = NULL;  //置NULL

为什么还会泄漏呢? 根本原因是,调用checkPtr(RefClass* ref_class_, int*& p_n_)函数时,传入的是指向ref_class_->pInt内存的另一个指针_p_n,

delete p_n_;  // 删除指向的内存,即ref_class_->pInt指向的内存被删除
p_n_ = NULL;  // p_n_置NULL,但是!!!ref_class_->pInt没有被置NULL,因为指针p_n_并不是ref_class_->pInt的引用。p_n_只是main中_p_n的引用// 此时ref_class_->pInt成为野指针,因为它指向的内存已经被delete了

正确的用法是,将_p_n声明为 _pRefClass->pInt的引用,即int*& _p_n = _pRefClass->pInt;

所以在进行内存删除和指针重置时,要确定是否对原始内存和原始指针真正生效!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flask详细教程
  • <STC32G12K128入门第十步>USB HID键盘
  • 5年前端面试之路
  • 【LeetCode Cookbook(C++ 描述)】一刷二叉树综合(下)
  • “AI+Security”系列第2期(三):面向LLM(大语言模型)的漏洞挖掘与对齐防御研究
  • 橙色简洁大气体育直播自适应模板赛事直播门户自适应网站源码
  • YOLOv10:实时端到端目标检测
  • Linux驱动学习之点灯(一)
  • SVN限制提交文件必须填写日志---实操笔记
  • 【杂乱笔记】Kmp字符串匹配算法
  • 鸿萌数据恢复服务:SQL Server 中的“PFS 可用空间信息不正确”错误
  • XSS游戏
  • HTTP范围放大攻击简记
  • 三丰云免费服务器
  • 如何使用midjourney?MidJourney订阅计划及国内订阅教程
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • ComponentOne 2017 V2版本正式发布
  • JavaScript中的对象个人分享
  • JS笔记四:作用域、变量(函数)提升
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SQLServer之创建显式事务
  • STAR法则
  • Vue ES6 Jade Scss Webpack Gulp
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 闭包--闭包之tab栏切换(四)
  • 初探 Vue 生命周期和钩子函数
  • 大型网站性能监测、分析与优化常见问题QA
  • 对JS继承的一点思考
  • 好的网址,关于.net 4.0 ,vs 2010
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端相关框架总和
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 实现简单的正则表达式引擎
  • 算法-图和图算法
  • 树莓派用上kodexplorer也能玩成私有网盘
  • (003)SlickEdit Unity的补全
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C#)一个最简单的链表类
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Qt) 默认QtWidget应用包含什么?
  • (windows2012共享文件夹和防火墙设置
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (离散数学)逻辑连接词
  • (力扣题库)跳跃游戏II(c++)
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (四)事件系统
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (原)Matlab的svmtrain和svmclassify
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET C# 使用GDAL读取FileGDB要素类