验证指针是否不为 Null。 在 Visual Studio 2010 之前的 C 运行时库版本中,验证指定的内存范围对于读取和写入是否有效(仅限调试版本)。
语法
int _CrtIsValidPointer(
const void *address,
unsigned int size,
int access
);
参数
address
指向内存范围的开始位置以进行有效性测试。
size
指定的内存范围大小(以字节为单位)。
access
确定对内存范围的读/写访问能力。
返回值
如果指定的指针不为 Null,则 _CrtIsValidPointer 返回 TRUE。 在 Visual Studio 2010 之前的 CRT 库版本中,如果内存范围对于指定的一个或多个操作有效,则将返回 TRUE。 否则,该函数返回 FALSE。
注解
在 Visual Studio 2010 及更高版本的 CRT 库中,size 和 access 参数将被忽略,并且 _CrtIsValidPointer 仅验证指定的 address 是否不为 Null。 由于可轻松自行执行此测试,因此不建议使用此函数。 在 Visual Studio 2010 之前的版本中,该函数验证从 address 开始并扩展了 size 个字节的内存范围对于指定的一个或多个可访问操作是否有效。 当将 access 设置为 TRUE 时,内存范围对于读取和写入都有效。 当 access 为 FALSE 时,内存范围仅对于读取有效。 未定义 _DEBUG 时,会在预处理过程中删除对 _CrtIsValidPointer 的调用。
因为此函数返回 TRUE 或 FALSE,因此可将它传递到一个 _ASSERT 宏,以创建基本的调试错误处理机制。 如果内存范围对于读取和写入操作都无效,则以下示例将导致断言失败:
_ASSERTE( _CrtIsValidPointer( address, size, TRUE ) );
若要详细了解如何将 _CrtIsValidPointer 与其他调试函数和宏一起使用,请参阅用于报告的宏。 若要了解如何在基堆的调试版本中分配、初始化和管理内存块,请参阅 CRT 调试堆详细信息。
要求
| 例程 | 必需的标头 |
|---|---|
_CrtIsValidPointer |
<crtdbg.h> |
_CrtIsValidPointer 是 Microsoft 扩展。 有关兼容性信息,请参阅兼容性。
库
仅限 C 运行时库的调试版本。
示例
请参阅 _CrtIsValidHeapPointer 一文的示例。