Share via


_CrtMemDifference

比较两个内存状态并返回他们的差异 (只允许调试版本)。

int _CrtMemDifference( 
   _CrtMemState *stateDiff,
   const _CrtMemState *oldState,
   const _CrtMemState *newState 
);

参数

  • stateDiff
    用于存储两个内存状态之间的差异的 _CrtMemState 结构指针 (返回)。

  • oldState
    指向前面的内存状态 (_CrtMemState 结构) 的指针。

  • newState
    指向后面的内存状态(_CrtMemState 结构) 的指针。

返回值

如果内存状态最大,_CrtMemDifference则返回TRUE。 否则,该函数返回FALSE。

备注

_CrtMemDifference函数比较oldState和newState并且在stateDiff中存储他们的差异,让他们接下来可以用来探测应用程序的内存状态和检测其他内存问题。 当 _DEBUG 未定义时, _CrtMemDifference 调用在预处理期间被移除。

newState 和 oldState 必须每个对于**_CrtMemState都是有效的指针结构,定义在 Crtdbg.h,即由调用 _CrtMemDifference之前的 _CrtMemCheckpoint 填充的。 stateDiff 必须是指向_CrtMemState** 结构以前指定的实例。 如果stateDiff, newState或者oldState是NULL,无效的参数将会会调用处理,如参数验证中所描述的。 如果允许执行继续,则这些功能将 EINVAL 设置为 errno、_doserrno、_sys_errlist 和 _sys_nerr,并返回FALSE。

_CrtMemDifference比较oldState块中的**_CrtMemState**区域值,并到 newState中存储结果到stateDiff。 当数字的分配块类型或总数的分配每个块类型不同于两个内存状态之间时,状态被视为显着的不同。 为两个状态立即分配的巨额之间的差异以及总分配之间的差异两个状态之间在 stateDiff

默认情况下,内部 C 运行时块 (_CRT_BLOCK) 不包括内存状态操作。 _CrtSetDbgFlag函数可以用来打开**_crtDbgFlag_CRTDBG_CHECK_CRT_DF用来包含泄露探测的块和其他的内存状态操作。 已释放的存储区域 (_FREE_BLOCK**) 不会导致 _CrtMemDifference 返回TRUE。

有关堆状态函数的详细信息和 _CrtMemState结构,请参见 堆状态报告功能。 有关在调试版本中的基位置堆中内存如何分配,初始化和管理的详细信息,请参见CRT 调试堆详细信息

要求

例程

必需的标头

可选标头

_CrtMemDifference

<crtdbg.h>

<errno.h>

有关兼容性的详细信息,请参阅简介中的兼容性

库: 只适用于调试版本 CRT 库功能

示例

请参见 crt_dbg1

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关详细信息,请参阅平台调用示例

请参见

参考

调试例程

_crtDbgFlag