方法太多,工具的就不细说了,umdh,windbg都可以,说说代码的几个函数
调试的两个windows的头文件#include <crtdbg.h>#include<dbghelp.h>
1、内存状态比较
_CrtMemCheckpoint
_CrtMemCheckpoint
_CrtMemDifference
_CrtMemDumpAllObjectsSince
2、设置内存泄露报告
_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
之后根据报告的requestnum设置断点
_CrtSetBreakAlloc(146);
3、获取内存地址对应的requestNum
_CrtIsMemoryBlock(my_pointer, 10, &allocReqNum, NULL, NULL);
4、设置malloc,free的钩子函数
_CrtSetAllocHook();
free时参数requestnum是0,需要向上-1才能得到结构体再得到malloc时的requestnum
5、时刻检查内存边界是否被破坏
_CrtCheckMemory(),也可以让系统每次检查
_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF)