代码
#define _CRTDBG_MAP_ALLOC
#include <iostream>
#include <crtdbg.h>
using namespace std;
void test1() {
int* p = new int[10];
//int* p = (int*)malloc(sizeof(int) * 10);
}
void test2() {
int *p = new int[20];
//int* p = (int*)malloc(sizeof(int) * 20);
}
int main() {
test1();
test2();
_CrtDumpMemoryLeaks();
return 0;
}
crtdbg头文件
-
添加头文件
#include <crtdbg.h>
-
在程序退出前,也就是main函数return前,加上
_CrtDumpMemoryLeaks()
函数 -
显示结果1,使用
new
,使用#define _CRTDBG_MAP_ALLOC
与否都一样 -
显示结果2,使用
malloc
,不使用#define _CRTDBG_MAP_ALLOC
-
显示结果3,使用
malloc
,使用#define _CRTDBG_MAP_ALLOC
,会显示内存泄漏出在哪一行代码
自带快照功能
- 加断点
- 启用堆分析
- F10或F11逐步或逐过程运行,每一步都截取快照
Linux下可以使用valgrind工具
- 用-g参数正常编译输出文件
- 使用
valgrind --leak-check=full ./a.out
运行程序,程序退出后会显示内存泄漏信息。(图为引用)