AfxCheckMemory

BOOL AfxCheckMemory( );

返回值:如果没有内存错误,则为非零值;否则为0。

说明:
这个函数使自由内存池有效并在需要时输出错误信息。如果这个函数没有检测到内存冲突,它什么也不输出。
当前在堆中分配的所有内存块都会被检查,包括那些用 new分配的内存,但是不包括那些用直接调用内存分配函数分配的内存,例如malloc函数或者Windows的GlobalAlloc函数。如果发现有内存块存在错误,就会在调试器上输出错误信息。
如果你在程序模块中包含了下面的程序行:
#define new DEBUG_NEW
后面对AfxCheckMemory的调用都会显示发生内存分配的文件名和行号。
注意:
如果你的模块中包含了一个或多个串行化类的实现,那么你必须在最后一个IMPLEMENT_SERIAL宏之后包含#define程序行。这个函数仅在MFC的调试版本中起作用。

示例:
// AfxCheckMemory的例子
CAge* pcage = new CAge( 21 ); // CAge 是从 CObject.继承而来的
Age* page = new Age( 22 ); // Age 不是从 CObject.继承的
*(((char*) pcage) - 1) = 99; // 破坏前面的保护字节
*(((char*) page) - 1) = 99; // 破坏前面的保护字节
AfxCheckMemory();

程序的结果如下:
memory check error at $0067495F = $63, should be $FD
DAMAGE: before Non-Object block at $00674960
Non-Object allocated at file test02.cxx(48)
Non-Object located at $00674960 is 2 bytes long
memory check error at $00674905 = $63, should be $FD
DAMAGE: before Object block at $00674906
Object allocated at file test02.cxx(47)
Object located at $00674906 is 6 bytes long