VC工程有时候忘记释放使用NEW 关键字分配的资源,调试工程退出时提示:
Detected memory leaks!
Dumping objects ->
XXXXXX.cpp(19) :
{68} client block at 0x003F2D48, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003F2D48, 64 bytes long
{66} client block at 0x003F5F30, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003F5F30, 64 bytes long
{64} client block at 0x003F5DF0, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003F5DF0, 64 bytes long
上面提示说明了程序在{68},{66},{64}三个地方分配的资源没有被释放,我们使用如下方法可以把没有被释放的地方找出来
把如下代码放在程序的最开始地方(如构造函数),
运行程序后,程序会跳转到断点调试处(选择中断),
此时你打开“调用堆栈”窗口,即可找到 内存泄露之处
泄漏检测代码如下:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
_CrtSetBreakAlloc(629);//629为出错处地址
_CrtDumpMemoryLeaks();
// 写在后面:
// 关于内存泄漏检测,有一个Visual Leak Detector ,按照它的介绍的确很不错,可以直接具体到代码行指出内存泄漏,
//但是个人使用了一下,发现debug的速度太慢了,不知道是不是我个人程序的问题.......
//像上面的泄漏,我用CrtSetBreakAlloc这种简单的方法就足够了....
详细说明请参考以下连接,
http://blog.csdn.net/running_j/article/details/52091508
http://blog.csdn.net/xiliang_pan/article/details/37693125
http://www.cnblogs.com/phinecos/archive/2009/10/29/1592604.html