您的位置:首页 > 其它

Visual Studio内存泄漏调试

2016-03-13 20:36 351 查看
在可能泄漏的文件头部加入下面几行(保证malloc和new的泄漏都可以检测到)

#define _CRTDBG_MAP_ALLOC

#include <crtdbg.h>

#ifdef _DEBUG //重载new运算符

#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

#endif

然后在程序中加入下面代码

程序运行起始位置: _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

或者程序退出前加入: _CrtDumpMemoryLeaks();

需要在debug模式运行

下面是一个demo:

main.cpp

#define _CRTDBG_MAP_ALLOC

#include <crtdbg.h>

#ifdef _DEBUG //重载new运算符

#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

#endif

void* memleak1();

void* memleak2();

int main(){
//方法一

//_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

void *p1 = memleak1();

void *p2 = memleak2();

int *a = (int *)malloc(4*sizeof(int));

//方法二

_CrtDumpMemoryLeaks();

return 0;

}

memleak1.cpp

#include <stdlib.h>

#define _CRTDBG_MAP_ALLOC

#include <crtdbg.h>

#ifdef _DEBUG //重载new运算符

#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

#endif

void *memleak1(){

return malloc(1);

}
memleak2.cpp 与 memleak1.cpp类似
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: