次の方法で共有


_CrtIsValidHeapPointer

指定したポインターがローカル ヒープ (デバッグ バージョンだけ) であることを検証します。

int _CrtIsValidHeapPointer( 
   const void *userData 
);

パラメーター

  • userData
    割り当てられたメモリ ブロックの先頭へのポインター。

戻り値

_CrtIsValidHeapPointer は指定したポインターがローカル ヒープ内に存在する場合は true を返します。それ以外の場合は false が返されます。

解説

_CrtIsValidHeapPointer の関数が特定のメモリ アドレスがローカル ヒープ内にあることを確認するために使用されます。ローカル ヒープは C ランタイム ライブラリの特定のインスタンスによって作成されたマネージ ヒープを示します。したがってダイナミック リンク ライブラリが (DLL) ランタイム ライブラリに静的にリンクされている場合ランタイム ヒープの独自のインスタンスと独自のヒープがアプリケーションのローカル ヒープとは無関係です。_DEBUG が未定義の場合、_CrtIsValidHeapPointer の呼び出しはプリプロセスで削除されます。

この関数の戻り値が True または False するため単純なデバッグ エラー処理機構を作成する場合は _ASSERT マクロの 1 に渡すことができます。指定されたアドレスがローカル ヒープ内にない場合に、アサーションの失敗を発生させるには、次のように記述します。

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

他のデバッグ関数およびデバッグ マクロと連携した _CrtIsValidHeapPointer の使い方の詳細については、「レポート用マクロの使用」を参照してください。デバッグ バージョンのベース ヒープに対するメモリ ブロックの割り当て、初期化、管理方法の詳細については、「メモリ管理とデバッグ ヒープ」を参照してください。

必要条件

ルーチン

必須ヘッダー

_CrtIsValidHeapPointer

<crtdbg.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

C ランタイム ライブラリのデバッグ バージョンのみ。

使用例

// crt_isvalid.c
/*
 * This program allocates a block of memory using _malloc_dbg
 * and then tests the validity of this memory by calling 
 * _CrtIsMemoryBlock,_CrtIsValidPointer, and _CrtIsValidHeapPointer.
 */

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

#define  TRUE   1
#define  FALSE  0

int main( void )
{
        char *my_pointer;

        /* 
         * Call _malloc_dbg to include the filename and line number
         * of our allocation request in the header information
         */
        my_pointer = (char *)_malloc_dbg( sizeof(char) * 10, 
        _NORMAL_BLOCK, __FILE__, __LINE__ );

        // Ensure that the memory got allocated correctly
        _CrtIsMemoryBlock((const void *)my_pointer, sizeof(char) * 10, 
        NULL, NULL, NULL );

         // Test for read/write accessibility
        if (_CrtIsValidPointer((const void *)my_pointer, 
        sizeof(char) * 10, TRUE))
                printf("my_pointer has read and write accessibility.\n");
        else
                printf("my_pointer only has read access.\n");

        // Make sure my_pointer is within the local heap
        if (_CrtIsValidHeapPointer((const void *)my_pointer))
                printf("my_pointer is within the local heap.\n");
        else
                printf("my_pointer is not located within the local"
                       " heap.\n");

        free(my_pointer);
}

出力

my_pointer has read and write accessibility.
my_pointer is within the local heap.

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

デバッグ ルーチン