_CrtMemDifference

比较两个内存状态,并返回它们的差异(仅限调试版本)。

语法

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

参数

stateDiff
指向 _CrtMemState 结构的指针,此结构用来存储这两个内存状态(已返回)的差异。

oldState
指向较早内存状态(_CrtMemState 结构)的指针。

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

返回值

如果内存状态的差异很大,则 _CrtMemDifference 返回 TRUE。 否则,该函数返回 FALSE

注解

_CrtMemDifference 函数对比 oldStatenewState,并存储它们在 stateDiff 中的差异,应用程序随后可使用此差异来检测内存泄露和其他内存问题。 未定义 _DEBUG 时,会在预处理过程中删除对 _CrtMemDifference 的调用。

newStateoldState 都必须是指向 crtdbg.h 中定义的 _CrtMemState 结构的有效指针,_CrtMemCheckpoint 在调用 _CrtMemDifference 之前填充。 stateDiff 必须为一个指针,指向 _CrtMemState 结构中先前分配的实例。 如果 stateDiffnewStateoldStateNULL,则将调用无效参数处理程序,如参数验证中所述。 如果允许继续执行,则将 errno_doserrno_sys_errlist_sys_nerr 设置为 EINVAL,并且函数会返回 FALSE

_CrtMemDifferenceoldState 中块的 _CrtMemState 字段值与 newState 中的此类字段值进行比较,并将结果存储在 stateDiff 中。 当每个类型的已分配块类型数或已分配块总数在两种内存状态之间不同时,状态的差异被认为是显著的。 stateDiff中还存储了同时向这两个状态分配的最大数之间的差异,以及这两个状态的总分配数之间的差异。

默认情况下,内存状态操作中不包含内部 C 运行时块 (_CRT_BLOCK)。 _CrtSetDbgFlag 函数可用来打开 _crtDbgFlag_CRTDBG_CHECK_CRT_DF 位,以将这些块包含在泄漏检测和其他内存状态操作中。 已释放的内存块 (_FREE_BLOCK) 不会导致 _CrtMemDifference 返回 TRUE

有关堆状态函数和 _CrtMemState 结构的详细信息,请参阅堆状态报告函数。 若要了解如何在基堆的调试版本中分配、初始化和管理内存块,请参阅 CRT 调试堆详细信息

要求

例程 必需的标头 可选标头
_CrtMemDifference <crtdbg.h> <errno.h>

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

库:仅限 C 运行时库的调试版本。

另请参阅

调试例程
_crtDbgFlag