Windows下内存泄漏检测方法一
1、在主程序的cpp文件里加上以下三行,顺序一定不能颠倒
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
2、在程序退出的时候加上_CrtDumpMemoryLeaks(),如果程序有多个退出的地方,则多个地方要加_CrtDumpMemoryLeaks()比较麻烦,可以在程序的开始处加上_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)
3、经过实验_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF )和_CrtDumpMemoryLeaks()竟然会发现不一样的内存泄漏
4、_CrtDumpMemoryLeaks()的返回值表示有几处内存泄漏,如果在程序退出是提示程序员有几处内存泄漏肯定会比在Output里提示强的多。可通过如下方式设置:
void Exit()
{
int i = _CrtDumpMemoryLeaks();
_ASSERT( i == 0);
}
1、在主程序的cpp文件里加上以下三行,顺序一定不能颠倒
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
2、在程序退出的时候加上_CrtDumpMemoryLeaks(),如果程序有多个退出的地方,则多个地方要加_CrtDumpMemoryLeaks()比较麻烦,可以在程序的开始处加上_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)
3、经过实验_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF )和_CrtDumpMemoryLeaks()竟然会发现不一样的内存泄漏
4、_CrtDumpMemoryLeaks()的返回值表示有几处内存泄漏,如果在程序退出是提示程序员有几处内存泄漏肯定会比在Output里提示强的多。可通过如下方式设置:
void Exit()
{
int i = _CrtDumpMemoryLeaks();
_ASSERT( i == 0);
}
在程序进入后设置atexit(Exit);
还有一种方式(自己试验过):
1、在主程序的cpp文件里加上以下三行,顺序一定不能颠倒
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
2、在程序进入时设置_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF )