_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。有关更多信息,请参见平台调用示例

请参见

参考

调试例程