C++内存泄漏的调试
一、在程序代码中加入代码:
头文件和宏定义:
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h> #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
注意:#include 语句的顺序。如果更改此顺序,所使用的函数可能无法正确工作。
在析构函数最后一行调用:
_CrtDumpMemoryLeaks();
二、在调试过程中监视指定内存位置:
C运行库(C run-time library)
long _CrtSetBreakAlloc( long lBreakAlloc );
其中参数lBreakAlloc即为内存分配号(花括号中的数字)。我们只要在程序初始化函数中添加语句:_CrtSetBreakAlloc(80)就可以使程序在Debug
F5运行时自动断点到我们想要的位置。
在Watch窗口中:
静态链接 在name项中输入_crtBreakAlloc,在value项中输入你要定位的内存分配编号;
动态链接 在name项中输入{msvcr130d.dll}_crtBreakAlloc,在value项中输入内存分配号;
没有坚守就没有事业,没有执着就没有未来!