_CrtSetAllocHook
通过将它安装一个客户端定义的函数分配到 C 运行时调试内存分配的分配过程 (请只调试版本)。
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
参数
- allocHook
指向挂钩的新客户端定义的函数分配到 C 运行时的调试内存分配的分配流程。
返回值
,如果 allocHook 是 NULL,返回以前定义的分配挂钩函数或 NULL 。
备注
_CrtSetAllocHook 允许应用程序挂钩自己的函数分配到 C 运行时调试库内存分配的分配流程。 因此,每个调用调试分配函数分配,重新分配或释放内存块触发器对应用程序的挂钩函数。 _CrtSetAllocHook 如何提供应用程序提供了一种简单的方法来测试应用程序处理内存不足情况、能够检查分配模式和机会记录在以后进行分析分配信息。 当 _DEBUG 未定义时,在预处理期间,对 _CrtSetAllocHook 中移除。
_CrtSetAllocHook 功能内置在 allocHook 指定的新客户端定义的分配函数并返回以前定义的挂钩函数。 下面的示例演示一个客户端定义的分配挂钩应如何原型:
int YourAllocHook( int allocType, void *userData, size_t size, int
blockType, long requestNumber, const unsigned char *filename, int
lineNumber);
allocType 参数指定分配操作 (_HOOK_ALLOC、触发对分配的挂钩函数的 _HOOK_REALLOC和 _HOOK_FREE) 的类型。 在触发的分配类型是 _HOOK_FREE时, userData 是指向的用户数据部分内存块已释放。 但是,那么,当触发的分配类型是 _HOOK_ALLOC 或 _HOOK_REALLOC时, userData 是 NULL ,因为内存块未分配。
size 指定的大小 (以字节块, blockType 指示的类型内存块, requestNumber 为的对象分配订单数量,内存块,因此,如果存在, filename 和 lineNumber 指定起始触发的赋值操作的源文件名和行号。
在挂钩函数完成此过程后,必须返回布尔值,调用主 C 运行时分配过程如何继续。 当挂钩函数需要主要时分配进程继续,就象挂钩函数从未调用,然后挂钩函数应返回 TRUE。 这会导致原始触发的赋值操作执行。 使用此实现,挂钩函数可以收集和保存在以后进行分析,分配信息,而不会干扰在调试堆的当前分配操作或状态。
当挂钩函数需要主要时分配进程继续,就象触发的赋值操作调用,并且它失败,然后挂钩函数应返回 FALSE。 使用此实现,挂钩函数可以如何模拟广泛的内存量情况和调试堆状态测试应用程序处理每种情况。
若要清除挂钩函数,请通过 NULL 到 _CrtSetAllocHook。
有关 _CrtSetAllocHook 如何使用与其他内存管理方式的更多信息函数或编写自己的客户端定义的挂钩函数,请参见 编写拥有调试挂钩函数。
备注
_CrtSetAllocHook 不支持在 /clr:pure下。
要求
实例 |
必需的头 |
---|---|
_CrtSetAllocHook |
crtdbg.h |
有关更多兼容性信息,请参见中介绍的 兼容性 。
库
只调试 C 运行库 的版本。
示例
有关此示例演示如何使用 _CrtSetAllocHook,请参见 crt_dbg2。
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。