内存泄漏:指的是在程序里动态申请的内存在使用完后,没有进行释放,导致这部分内存没有被系统回收,久而久之,可能导致程序内存不断增大,系统内存不足……引发一系列灾难性后果
#define _CRTDBG_MAP_ALLOC
#include
#include
_CrtDumpMemoryLeaks()
#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)int main()
{........._CrtDumpMemoryLeaks();return 0;
}
Microsoft:使用 CRT 库查找内存泄漏
VS检测内存泄漏,定位泄漏代码位置方法
使用_CrtSetDbgFlag检测内存泄露
关于MFC下检查和消除内存泄露的技巧
在main函数第一行加上:_CrtSetBreakAlloc(453)
\ _crtBreakAlloc = 18
设置vs项目运行库Propertise -> C/C++ -> Code Generation -> Runtime Library
F11启动程序,程序会停在入口点。
在【监视】窗口中添加一行,name项中输入{,,msvcr90d.dll}_crtBreakAlloc
, value项中输入内存分配号。注意msvcr90d.dll是vc2008环境使用的运行库dll,若你用的是其他版本vc,请换成对应版本的dll。
若name无法识别可尝试如下:
{,,ucrtbased.dll}_crtBreakAlloc
_CrtSetBreakAlloc
{,,msvcrtd.dll}_crtBreakAlloc
(int*){,,msvcr120d.dll}_crtBreakAlloc
按F5运行,程序自动定位到要调试的内存分配语句
查看call stack的信息。
VC使用_crtBreakAlloc快速定位内存泄漏所在代码
Why might _CrtSetBreakAlloc not cause a breakpoint?
VS2017的C++开发心得(十一)调试——内存溢出和内存泄漏(上)