_CrtIsMemoryBlock
确认指定的内存块位于本地堆,并且具有有效的调试堆块类型标识符(仅限调试版本)。
语法
int _CrtIsMemoryBlock(
const void *userData,
unsigned int size,
long *requestNumber,
char **filename,
int *lineNumber
);
参数
userData
指向要验证的内存块开头的指针。
size
指定块的大小(以字节为单位)。
requestNumber
指向块分配编号的指针或 NULL
。
filename
指向已请求块的源文件名的指针或 NULL
。
lineNumber
指向源文件中的行号的指针或 NULL
。
返回值
如果指定的内存块位于本地堆,并且具有有效的调试堆块类型标识符,则 _CrtIsMemoryBlock
返回 TRUE
,否则,该函数返回 FALSE
。
备注
_CrtIsMemoryBlock
函数确认指定的内存块位于应用程序的本地堆,并且具有有效的块类型标识符。 此函数还可用于获取最初请求内存块分配的对象分配序号和源文件名/行号。 传递到 requestNumber
、filename
或 lineNumber
参数的非 NULL
值导致 _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
一文的示例。