ポインターが null ではないことを確認します。 Visual Studio 2010 より前のバージョンの C ランタイム ライブラリでは、指定したメモリ範囲で読み取りおよび書き込みが可能であることを確認します (デバッグ バージョンのみ)。
構文
int _CrtIsValidPointer(
const void *address,
unsigned int size,
int access
);
パラメーター
address
確認のためにテストするメモリ範囲の先頭を指します。
size
指定されたメモリ範囲のサイズ (バイト単位)。
access
メモリ範囲に対して確認する読み取り/書き込みアクセシビリティ。
戻り値
_CrtIsValidPointer は、指定したポインターが null でない場合は 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 を使用する方法の詳細については、「 Macros for reportingを参照してください。 基本ヒープのデバッグ バージョンでのメモリ ブロックの割り当て、初期化、および管理方法については、「 CRT デバッグ ヒープの詳細を参照してください。
要件
| ルーチンによって返される値 | 必須ヘッダー |
|---|---|
_CrtIsValidPointer |
<crtdbg.h> |
_CrtIsValidPointer は Microsoft 拡張機能です。 互換性の詳細については、「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのデバッグ バージョンのみ。
例
_CrtIsValidHeapPointer記事の例を参照してください。