定位C++内存泄漏代码段具体位置

STEP1:

定义一个头文件,例如configure.h,用于存放一些配置项:

#pragma once
#include
using namespace std;
#define _CRTDBG_MAP_ALLOC  // MEMORY_LEAKS_STEP01
#include   
#include 
#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符号,将该符号加入到工程中即可。

你可能感兴趣的:(C++,内存管理)