_CrtIsMemoryBlock
验证指定的内存块是在本地堆中,而且它有一个有效的调试堆块类型标识符(仅调试版本)。
int _CrtIsMemoryBlock(
const void *userData,
unsigned int size,
long *requestNumber,
char **filename,
int *linenumber
);
参数
[in] userData
验证内存块的开头的指针。[in] size
(以字节)为单位的特定块大小。[out] requestNumber
分配块的数目或 NULL 的指针。[out] filename
指向请求块或 NULL 的源文件的名称的指针。[out] linenumber
当前源文件中的行号或 NULL 的指针。
返回值
如果指定的内存块位于本地堆内,并有有效的调试堆块类型标识符,_CrtIsMemoryBlock 返回 TRUE ,否则,函数返回 FALSE。
备注
_CrtIsMemoryBlock函数验证在应用程序的本地堆中的指定的内存块,而且它有一个有效的块类型标识符。 此函数还可用于获取对象分配排序数字,并存储区域分配的源文件名和行号最初请求。 传递non-NULL值到 requestNumber,filename 或 linenumber 参数,如果它发现该块在本地堆中,会导致 _CrtIsMemoryBlock 设置这些参数为内存块的调试头的值。 当 _DEBUG 未定义时,在预处理期间移除对 _CrtIsMemoryBlock 的调用。
如果 _CrtIsMemoryBlock 失败,则返回FALSE 并初始化输出参数为默认值:requestNumber 和 lineNumber 被设置为 0 并 filename 设置为 NULL。
因为函数返回 TRUE 或 FALSE, 所以能传递一个 _ASSERT 宏命令来创建一个简单的调试错误处理机制。 如果指定的地址不在本地堆内,则下面的示例将导致论断失败:
_ASSERTE( _CrtIsMemoryBlock( userData, size, &requestNumber,
&filename, &linenumber ) );
有关 _CrtIsMemoryBlock 如何可用在其它调试函数和宏命令中的详细信息, 请参阅 用于报告的宏。 有关在调试版本中的基位置堆中内存如何分配,初始化和管理的详细信息,请参阅 CRT 调试堆详细信息。
要求
例程 |
必需的标头 |
---|---|
_CrtIsMemoryBlock |
<crtdbg.h> |
有关更多兼容性信息,请参见“简介”中的兼容性。
库
仅限 C 运行时库的调试版本。
示例
请参阅 _CrtIsValidHeapPointer 主题的示例。
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例。