STEP1:
定义一个头文件,例如configure.h
,用于存放一些配置项:
#pragma once
#include<iostream>
using namespace std;
#define _CRTDBG_MAP_ALLOC // MEMORY_LEAKS_STEP01
#include <stdlib.h>
#include <crtdbg.h>
#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
STEP2
定义一个函数LeakDetect
,名字任意,放在哪里也随意,前提是放到可以使用configure.h
头文件的位置处。
void LeakDetect(char * p, int num){//MEMORY_LEAKS_STEP02
p = (char *)malloc(sizeof(char) * num);
}
STEP3
对于一个待检测的代码段,首先在这个代码段前面定义一些变量,用以存储信息,然后再代码段执行结束的位置调用_CrtDumpMemoryLeaks()
函数。整体结构如下:
char *str=NULL;
LeakDetect(str, 100);
....................
...要检测的代码块...
....................
_CrtDumpMemoryLeaks();
STEP4
再输出窗口观察内存泄露信息,这里会提示具体的内存泄漏的代码位置。
注意事项
有时候会无法看到内存泄漏的具体函数名,这是因为没有加载PDB符号,将该符号加入到工程中即可。