
内存泄露简介对于C程序员来说代码开发完成测试运行也OK后并不代表这个程序就没有问题了。当你编译运行完程序后打开输出窗口有时就会看到哇~怎么这么多一串一串的数据啊其实这种东西对于C程序员来说也是最不陌生和最为常见的问题了这就是大家常说的内存泄露问题下面我们先来说一下什么是内存泄露内存泄露内存泄露通常是发生在堆上的是由于用户在写程序时在堆上去申请了内存但是在程序结束时用户没有去主动释放内存从而产生内存泄露的问题出现内存泄露问题时通常的做法时检查程序中使用的new或者malloc申请内存后是否在程序结束前释放了对于的内存。C程序的开发不像其它的语言比如Java语言大多数人应该常用new而很少用delete吧并不是说Java没有内存泄露的问题而是Java自己又做了一套“垃圾回收”的机制就是在程序运行结束时Java语言会自动回收用户使用的内存所以Java程序员是很少关心内存泄露问题的。而C的程序就不一样了如果你在堆上申请了内存但是你没有手动去释放它他就会发生内存泄露秉着一条你不管我也不管的原则乐咋咋样反正我是不管。C这样干也是可以理解的你去主动申请的内存凭什么要我来给你收尾所以呢在写C程序时要秉着有始有终的原则用完了就给人还回去。内存泄露的解决内存泄露的解决方法也是有很多种的对于代码量少的程序来说当发生内存泄露时可以查找程序中的所有new或者malloc的使用看看释放手动释放了内存或者由于错误的代码导致指针指向的地址被覆盖导致没人管理从而引起内存泄露。也可以使用”计数法“来检查是否有内存泄露问题就是利用一个全局变量当申请内存时将变量值加1当释放内存时将变量的值减1程序结束后打印变量的值看看释放为0来检测是否发生了内存泄露但是对于代码量较大并且内存泄露较多的情况下在一个个的去找就有点浪费时间了所以我们就需要借助工具来检测内存泄露发生的具体位置这样就可以使我们更加高效的去解决问题。对于内存泄露的检测工具常用的就是Visual Leak Detector下面简称VLD这款工具就是专门用来检测内存泄露的并且使用起来也是非常简单的下面我们就来介绍一下VLD的安装与使用VLD工具的介绍及使用VLD的功能是当有内存泄露发生时可以提供引起内存泄露发生的具体位置也就可以精准的解决这个问题安装与使用首先去VLD官网下载VLD安装包下载地址Visual Leak Detector | Enhanced Memory Leak Detection for Visual C下载好后双击安装包进行安装安装就直接无脑next就可以这里就不细说了安装好后要重启电脑接着就可以在VLD的安装目录下看到vld.ini这个文件这是VLD的配置文件这里面放着VLD的一些配置选项可以修改它们来设置VLD的运行策略然后打开项目在程序的最开始引入vld.h头文件程序的最开始也就是main函数所在的cpp文件中如果项目有预编译头文件的话也可以放到那个里面紧接着就是以运行程序如果程序在编译时没有问题并且运行时成功看到下图的这段话就表示配置成功了然后就可以正常的运行程序在程序结束时就可以看到内存泄露的位置这里有的大佬可能会出现vld.h头文件无法打开的问题正常情况下是不会的后面我们会说这个问题的解决方法不要着急遇事不要慌VLD内存泄露信息显示问题可能有些大佬的输出信息是下图所示的样子这时就有人会说了这还改个鸡毛啊这咋找是吧这个问题不是VLD的问题是项目的配置有问题修改一下就可以正常显示了点击项目属性→选择连接器→点击调试→将生成调试信息选项修改为“生成经过优化以共享和发布的调试信息”再次运行程序就可以看到VLD生成的调试信息就是内存泄露的具体位置了解决引入vld头文件出现文件无法打开的问题正常来说安装完VLD重启电脑后在程序中引入vld头文件是不会出现这种问题的但是出现了问题我们就来解决它这种问题的根本原因就是vs它不清楚这个文件的具体所在位置那我们就来指明它vld的头文件和静态库文件的位置都在vld的安装目录下所以我们把这两个文件夹给VS指明一下看看能不能解决这个问题点击项目属性→选择VC目录→在包含目录和库目录选项下分别添加VLD的头文件和库文件文件夹这里库文件分别提供了32位和64位的按照项目来添加就可以了添加完成后我们再来编译一下可以看到编译不报错了并且之前的错误也没有了我们在来运行一下看看功能可不可以使用可以看到功能也是没有问题的到这里内存泄露检测工具VLD的使用就介绍完了剩下的问题就交给各位大佬利用这个工具来解决程序中的内存泄露问题感谢观看学习大佬们多多指点愿明天的自己会感谢当下的努力