分配挂钩函数
,在分配内存,重新分配或释放时,分配挂钩函数,安装使用 _CrtSetAllocHook,调用。此类型的挂钩可用于许多不同用途。如何使用它测试应用程序处理内存不足情况,例如,或检查分配模式,或记录到以后进行分析的分配信息。
说明 |
---|
注意有关使用 C 运行库函数的限制在分配挂钩函数,描述在 分配挂钩和 C 运行时内存分配。 |
分配挂钩函数应具有如下原型:
int YourAllocHook(int nAllocType, void *pvData,
size_t nSize, int nBlockUse, long lRequest,
const unsigned char * szFileName, int nLine )
传递给 _CrtSetAllocHook 的指针为类型 _CRT_ALLOC_HOOK,如 CRTDBG.H 中所定义:
typedef int (__cdecl * _CRT_ALLOC_HOOK)
(int, void *, size_t, int, long, const unsigned char *, int);
当运行库调用您的挂钩时, nAllocType 参数指示分配操作将执行 (_HOOK_ALLOC、 _HOOK_REALLOC或 _HOOK_FREE)。在释放或重新分配, pvData 包含指向将释放块的用户主题。但是,在中,因为分配尚未发生,在分配,该指针为空。如果有剩余的参数包含相关的分配,其块类型,与它关联的顺序请求编号和对进行分配的文件名和行号的指针的大小,。在挂钩函数执行后任何分析及其他任务其作者需要,必须返回任何 TRUE,指示分配操作可以继续,或者 FALSE,指示操作失败。,如果该数量超出小限制,此类型到目前为止一个简单的挂钩可以检查内存分配的数量,并返回 FALSE 。然后应用程序将经历这通常将生成的分配错误,才可用内存极为不足的。,在特定情况发生时,更复杂的挂钩可以跟踪分配模式,分析内存使用、或报表。