功能:
  用于检?c++程序的内存泄露。
  原理:
  事实上非常easy,是通过函数的重载机制,捕获应用程序的new, new[] , delete , delete[], malloc,calloc,free等内存操作函数。
  特点:
  因为在检?的过程中,须要记录用户程序内存分配信息,所以工具本身必须进行内存动态分配。为了提高内存分配效率,程序实现了两个链表。
  1、空暇链表,事实上是一个简单的内存池
//定义一个结构,保存内存分配信息
typedef struct _tagMemoryInfo
{
    void* addr;          //保存分配的内存地址
    size_t size;         //内存大小
    _UL lineNum;      //调用内存分配函数的行号
    char fileName[MAX_FILE_LEN];  //文件名
}MemoryInfo;

//内存分配信息的链表结构,这里之所以定义为union类型,是为了省去next成员的开销
union FreeList
{
    FreeList* next;
    MemoryInfo data;
};
  2、当前正在保存内存信息的链表
typedef struct _tagBusyList
{
    _tagBusyList* next;
    MemoryInfo* data;
}BusyList;
  不足:
  1、仅仅是在vc2005上?试通过,没有在其它平台上?试过
  2、不支持多线程(兴许有可能支持)
  3、保存当前内存分配信息的链表,存在next字段的内存开销。
  源码:
  1、头文件
#ifdef DETECT_MEMORY_LEAK
#ifndef _DETECT_MEMORY_LEAK_H_
#define _DETECT_MEMORY_LEAK_H_
typedef unsigned long _UL;
void* __cdecl operator new(unsigned int size , _UL lineNum , const char* file);
void* __cdecl operator new[](unsigned int size , _UL lineNum , const char* file);
void __cdecl operator delete(void *p);
void __cdecl operator delete [] (void *p);
void __cdecl operator delete(void *p ,  _UL lineNum , const char* file);
void __cdecl operator delete [] (void *p ,  _UL lineNum , const char* file);
void* __cdecl _DebugMalloc(size_t size , _UL lineNum , const char* file);
void* __cdecl _DebugCalloc(size_t num , size_t size , _UL lineNum , const char* file);
void  __cdecl _DebugFree(void* addr);
#ifndef DETECT_MEMORY_LEAK_IMPL
#define new DEBUG_NEW
#define DEBUG_NEW new(__LINE__ , __FILE__)
#define malloc DEBUG_MALLOC
#define DEBUG_MALLOC(x) _DebugMalloc(x , __LINE__ , __FILE__)
#define calloc DEBUG_CALLOC
#define DEBUG_CALLOC(x) _DebugCalloc(x , __LINE__ , __FILE__)
#define free DEBUG_FREE
#define DEBUG_FREE(x) _DebugFree(x)
#endif
void DumpLeakedMemoryInfo();
#endif//_DETECT_MEMORY_LEAK_H_
#endif//DETECT_MEMORY_LEAK