跟前辈交流收获心德,使用非常精炼的形式描述内存泄露与野指针的本质。在此与大家分享,欢迎多多交流。
下面给出理解描述:
指针变量作用域    被指向对象生命周期    造成的结果
情况一    超出作用域            生命周期未结束        内存泄露
情况二    在作用域内            生命周期结束            野指针
情况三    超出作用域            生命周期结束            正确的执行
情况一代码片段举例:
{
A *a = new A();
}
当上述代码执行完成时,程序离开指针变量a的作用域,这时a会自动被系统回收,但a当初所指向的对象A的生命周期却没有结束,因为没有进行释放操作,会一直占用一块堆内存,直到程序进程退出才会释放。这样就出现了内存泄露。如果这样的代码还处在一个被高频率执行的环境下(如循环体中),那么系统内存消耗将不断增加到最后系统没有可分配的内存空间,系统崩溃。
情况二代码片段举例:
{
A *a = new A();
A *b = a;
delete a;
a = NULL;
if(NULL != b){//此时指针b并不为空,此处检测无效
b->toString();//指针b指向了一块未定义的内存,对它进行调用后果未定义
}
}
在指针变量b的作用域内,所指向的对象A的生命周期被delete a结束掉,相应的堆内存释放,导致指针b成为了野指针。
补充阅读:
http://www.cnblogs.com/lintong/archive/2012/07/18/2596720.html

C++内存泄露 与 野指针总结相关推荐

  1. C/C++内存泄漏和野指针的区别

    内存泄漏 概念解释 使用动态存储分配函数或关键字申请的内存空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束.即所谓内存泄漏. 表现行为 程序运行时间越长,占用 ...

  2. linux c 指针和内存分配内存,linux-C基础系列-内存管理(野指针).md

    野指针概述 野指针通常指的是指针变量中保存的值不会死一个合法的内存地址,但又对其访问.需要注意的是野指针不是空指针,而是指向内存不可用的指针. C语言中对于空指针(NULL)是可以判断出来的,但是野指 ...

  3. OC-引用计数器,内存管理,野指针

    总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...

  4. 【Tools】Linux下C和C++程序中内存泄露检测

    00. 目录 文章目录 00. 目录 01. 前言 02. valgrind安装 03. 使用未初始化的内存 04. 使用野指针 05. 动态内存越界访问 06. 分配空间后没有释放 07. 不匹配使 ...

  5. C++中野指针问题分析总结

    其实项目一直被野指针困扰,一直在讨论,居然没有什么下文,下文正式由我接受这个问题. 场景是这样:指针间互相引用,一个被删除的时候,另外一个不知道,它再使用的时候就会异常,因为此时指针已经为空了. 我今 ...

  6. C++两个 delete 后的问题 野指针

    最近在网上看到两个关于指针 delete 后的问题.第一种情况: 1 2 3 int* p = new int; delete p; delete p;// p为什么能delete两次,而程序运行的时 ...

  7. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

  8. C++中的野指针问题

    文章目录 1 C和C++中的野指针问题 1.1 野指针的概念 1.2 野指针的由来 1.3 杜绝野指针的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 ...

  9. C++中野指针问题以及如何杜绝野指针

    "野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是"野指针"是很危险的,if ...

最新文章

  1. LeetCode简单题之到目标元素的最小距离
  2. 异步委托实现多线程winform控件编程
  3. FLASH免激活js
  4. AS插件-Android Layout ID Converter
  5. IIS身份验证的配置
  6. ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator
  7. springboot-vue项目前台1
  8. 解决vue打包后静态资源路径错误的问题
  9. project 模板_施工进度横道图不会做?18份计划模板收藏好,输入参数迅速成图...
  10. node redis集群_如何使用集群扩展Node.js服务器
  11. 统一帐号体系业务及模型
  12. python操作linux命令行_python调用调用Linux命令
  13. java中的math pow_Java ME中的Math.pow()方法使用详解
  14. 小熊派·叔BearPi-HM Micro环境搭建(双系统)
  15. c语言网络时间校准,c语言如何建时间校准来和电脑一致?
  16. 第一学期ACM之旅总结篇
  17. 酷客多郝宪玮:新零售+社交电商的完美结合,将助力新零售品牌快速传播
  18. Kaggle教程 机器学习入门3 你的第一个机器学习模型
  19. 目录大全_安卓面经_Android面经_150道安卓基础面试题全解析
  20. python邮件发送和正则表达式(1)

热门文章

  1. 封装了一些 python 爬虫技巧,开箱即用
  2. win7explorerexe损坏黑屏_Win7系统提示“explorer.exe损坏的图像”怎么解决?
  3. 优思学院|六西格玛绿带和黑带的年薪收入有多少?
  4. 在html中怎么写特殊符号,网页制作中的“特殊符号” 是如何实现的
  5. 一个程序员的成长的六个阶段
  6. 【Android】Handler 深度解析
  7. python倾向匹配得分_倾向评分匹配的SPSS和R实现方法
  8. 运用RapidMiner进行关联分析(算子有read csv,select attribute,fp-growth,create association rules)
  9. 郑州轻工业大学OJ1024: 计算字母序号
  10. 王小草【机器学习】笔记--EM算法