1. 什么是内存泄漏(memory leak)?

指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

2. 两种类型的内存泄漏:

堆内存泄漏(Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak.

系统资源泄露(Resource Leak).主要指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。
在linux中 两个文件描述符指向一个file。必须关闭两次,否则会出现内存泄露
还有在linux中,open()以后一定要加上close()
eg:closehandle() closesocket()

内存泄露引出内存溢出话题:
所谓内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是会产生内存溢出的问题。

常见的溢出主要有:
内存分配未成功,却使用了它。
常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p 是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc 或new 来申请内存,应该用if(p==NULL)或if(p!=NULL)进行防错处理。

内存分配虽然成功,但是尚未初始化就引用它。
内存分配成功并且已经初始化,但操作越过了内存的边界。
例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for 循环语句中,循环次数很容易搞错,导致数组操作越界。

使用free 或delete 释放了内存后,没有将指针设置为NULL。导致产生“野指针”。

最新文章

  1. 1.2 基础知识——关于猪皮(GP,Generic Practice)
  2. ubuntu设置屏幕亮度
  3. Markdown 学习资源
  4. HDU5634 Rikka with Phi 线段树
  5. 我的WCF之旅(1):创建一个简单的WCF程序
  6. kernal linear regression
  7. hdu1876(dp)
  8. (017)将一棵二叉查找树重构成链表(keep it up)
  9. 使用canvas实现绚丽的时钟特效
  10. Vue一个案例引发「内容分发slot」的最全总结
  11. nginx配置支持http2
  12. Rabbimq 安装过程,还有踩得坑!centos 安装
  13. [转] javascript 保留两位小数 (且不四舍五入)
  14. c#UDP协议
  15. [UGUI]Image源码分析
  16. ImageView android:scaleType="centerCrop"
  17. 学习笔记<4>初步控件布局
  18. 【第十课】Tomcat入门
  19. SSM(SpringMVC+Spring+Mybatis)框架程序on IDEA
  20. 【Loj10222】佳佳的Fibonacci

热门文章

  1. 旧文备份:AVR读写EEPROM分析
  2. machine learning学习笔记
  3. 3、SpringBoot+MybatisPlus整合-------代码生成器
  4. javaWeb css图文混排
  5. udp重发java实现
  6. Webpack4 学习笔记五 图片解析、输出的文件划分目录
  7. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
  8. hdu_1452_Happy 2004 (乘法逆元
  9. Mysql5.7创建存储过程中调用自定义函数报错Not allowed to return a result set from a function
  10. linux文件访问过程和权限