Object dump complete.
如果你没有用#define _CRTDBG_MAP_ALLOC 说明,内存漏洞堆存处类似下面这样:
Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
像你所知道的,当_CRTDBG_MAP_ALLOC 被定义时,_CrtDumpMemoryLeaks 给了你更
多的有用信息。如果_CRTDBG_MAP_ALLOC 没有被定义,那么将向你如下显示:
内存分配数值(花括号内)
模块的类型(normal、client 或者 CRT
)
以十六进制格式定位的内存
以字节计模块的大小
第一个十六字节的内容(也可以用十六进制)
当定义了_CRTDBG_MAP_ALLOC 的时候,显示的内容也向你展现了出现泄漏内存所分
配地方的文件。在文件名之后括号内的数字(20,以此为例)是文件内的行数值。如果你
双击包含行数值和文件名的输出行,
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} normal
block at 0x00780E80, 64 bytes long.
指针将会跳到源文件中内存被分配地方的行(在上面的情况下, leaktest.cpp 的行号为
20)。选择输出行并按 F4 将有同样的效果。
使用_CrtSetDbgFlag
如果你的程序总是在同一各地方存在,那么调用_CrtDumpMemoryLeaks 时非常容易的。
但是,如果你的程序需要在多个位置退出该怎么办?在每一个可能的出口处如果不调用
_CrtDumpMemoryLeaks,你可在你的程序开始处包含下面的调用:
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
当你的程序退出时,这个说明自动地调用_CrtDumpMemoryLeaks。你必须设置两个位域,
_CRTDBG_ALLOC_MEM_DF
和 _CRTDBG_LEAK_CHECK_DF,像以前说明的一样。