一、什么是内存泄露
内存泄露是指:内存泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。
二、常见的内存泄露造成的原因
C/C++程序中一般我们关心两种方面的内存泄漏:
·堆内存泄漏(Heap leak)
堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存,用完后必须通过调用相应的 free或者delete 删掉。假设程序的设计错误导致这部分内存没有被释放,那么以后这部分空间将无法再被使用,就会产生Heap Leak。
·系统资源泄漏
指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。
三.如何检测内存泄漏
在linux下内存泄漏检测:https://blog.csdn.net/gatieme/article/details/51959654
在windows下使用第三方工具:https://blog.csdn.net/GZrhaunt/article/details/56839765
其他工具:https://www.cnblogs.com/liangxiaofeng/p/4318499.html
四.如何避免内存泄漏
1、事前预防型。工程前期良好的设计规范,养成良好的编码规范,申请的内存空间记着匹配的去释放。但是这个理想状态。但是如果碰上异常时,就算注意释放了,还是可能会出问题。需要下一条智能指针来管理才有保证。
2、事后查错型。使用第三方泄漏检测工具。