windows 检测内存泄露的方法很多,这里简要说两种:

一、_CrtDumpMemoryLeaks()

这种只能在 debug下可以使用,存在限制,但很多时间我们的版本是发布版本;

下面说一下使用方法:

在main函数最后面一行,加上一句_CrtDumpMemoryLeaks()。调试程序,自然关闭程序让其退出(不要定制调试),查看输出:

Detected memory leaks!
Dumping objects ->
{154} normal block at 0x0000013368D5A490, 64 bytes long.
Data: <https://llll-> 68 74 74 70 73 3A 2F 2F 6C 69 63 65 6E 73 65 2D
{153} normal block at 0x0000013368D685A0, 16 bytes long.
Data: < ~ > 00 95 7E F1 F7 7F 00 00 00 00 00 00 00 00 00 00
Object dump complete.

这里要注意:有些是全局变化,这里也显示出来了,其实不是内存泄露;

取其中一条详细说明:{154} normal block at 0x0000013368D5A490, 64 bytes long.

被{}包围的154就是我们需要的内存泄漏定位值,64 bytes long就是说这个地方有 内存没有释放。

接下来,定位代码位置:

在main函数第一行加上:_CrtSetBreakAlloc(154); 意思就是在申请154这块内存的位置中断。然后调试程序,……程序中断了。查看调用堆栈,双击可以定位到代码;

挨个定位每个内存泄露点就可以,这里要注意,它只是定位了最终的泄露点,有些可能是自己没有调用 release 接口造成的,自己补全就可以了,不要头痛医头。

二、使用 Visual Leak Detector

下载VLD,可以去官网下载.

​http://vld.codeplex.com/​


最终验证可以我们可以使用 VS 诊断工具

VS 检测和定位内存泄露_windows