方法1:
在InitInstance函数开始处添加
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
_CrtSetBreakAlloc(4964);
其中4964为退出程序时,提示内存泄露对应的号。
如
Detected memory leaks!
Dumping objects ->
{4964} normal block at 0x0519FFB0, 16 bytes long.
Data: <I v > 49 02 00 00 A9 01 00 00 76 02 00 00 CC 01 00 00
{4945} normal block at 0x0519FA78, 16 bytes long.
Data: <v > 76 02 00 00 A9 01 00 00 A3 02 00 00 CC 01 00 00
{4926} normal block at 0x0519F540, 16 bytes long.
Data: < I > 1C 02 00 00 A9 01 00 00 49 02 00 00 CC 01 00 00
{4907} normal block at 0x0519F008, 16 bytes long.
Data: <I v > 49 02 00 00 CC 01 00 00 76 02 00 00 EF 01 00 00
再次运行程序,则程序会在分配4964号对应的内存位置break掉。通过查看调用堆栈,就可以知道分配哪块内存区域时
出错,此时确认此此分配的内存空间是否是否。
方法2:
由于有时提示的内存泄露号会变化,此时较麻烦,就需要细活了。
逐步的注释模块,缩小内存泄露位置的范围。