只要把下面的代码定义到公共头文件中,这里定义一个类目的是在main函数执行之前,就执行这个函数
这样在开发环境的输出窗口基本上和MFC检查输出的结果差不多了
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif
#ifdef _DEBUG
#define meMalloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define meCalloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define meRealloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define meExpand(p, s) _expand_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define meFree(p) _free_dbg(p, _NORMAL_BLOCK)
#define meMemSize(p) _msize_dbg(p, _NORMAL_BLOCK)
#define meNew new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define meDelete delete // Set to dump leaks at the program exit.
#define meInitMemoryCheck() /
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)
#else
#define meMalloc malloc
#define meCalloc calloc
#define meRealloc realloc
#define meExpand _expand
#define meFree free
#define meMemSize _msize
#define meNew new
#define meDelete delete
#define meInitMemoryCheck()
#endif
class MemoryCheckInitializer
{
public:
MemoryCheckInitializer()
{
meInitMemoryCheck();
}
};
static MemoryCheckInitializer mci_;
如下面的输出结果
./Main.cpp(69) : {165} normal block at 0x003B9F88, 4 bytes long.
Data: <A > 41 00 00 00
只要点击那个输出行就会定位到当前的源代码
Data:后的<>内表示这段内存的字符数据,后面的时候16进 制数据
其实还可以用一些现成的类库,比如vld,这个是动态检测的,也可以用一些静态检测工具,不过静态检测功能有限!