_CrtIsValidHeapPointer_CrtIsValidHeapPointer

Sprawdza, czy określony wskaźnik znajduje się w stercie przydzielonej przez część biblioteki wykonawczej C, ale niekoniecznie przez bibliotekę CRT obiektu wywołującego.Verifies that a specified pointer is in a heap allocated by some C run-time library, but not necessarily by the caller's CRT library. W wersjach CRT przed Visual Studio 2010 sprawdza, czy określony wskaźnik znajduje się w stercie lokalnym (tylko wersja do debugowania).In versions of the CRT before Visual Studio 2010, this verifies that the specified pointer is in the local heap (debug version only).

SkładniaSyntax

int _CrtIsValidHeapPointer(
   const void *userData
);

ParametryParameters

userDatauserData
Wskaźnik na początek przydzielony blok pamięci.Pointer to the beginning of an allocated memory block.

Wartość zwracanaReturn Value

_CrtIsValidHeapPointer zwraca wartość true, jeśli określony wskaźnik znajduje się w stercie współdzielonym przez wszystkie wystąpienia biblioteki CRT._CrtIsValidHeapPointer returns TRUE if the specified pointer is in the heap shared by all CRT library instances. W wersjach CRT przed Visual Studio 2010 zwraca wartość TRUE, jeśli określony wskaźnik znajduje się na stercie lokalnej.In versions of the CRT before Visual Studio 2010, this returns TRUE if the specified pointer is in the local heap. W przeciwnym razie funkcja zwraca wartość FALSE.Otherwise, the function returns FALSE.

UwagiRemarks

Nie zalecamy korzystania z tej funkcji.We do not recommend that you use this function. Począwszy od biblioteki CRT programu Visual Studio 2010, wszystkie biblioteki CRT korzystają z jednej sterty systemu operacyjnego, sterty procesu.Starting with the Visual Studio 2010 CRT library, all CRT libraries share one OS heap, the process heap. Funkcja _CrtIsValidHeapPointer określa, czy wskaźnik został przydzielony w stercie CRT, ale nie jest przydzielany przez bibliotekę CRT obiektu wywołującego.The _CrtIsValidHeapPointer function reports whether the pointer was allocated in a CRT heap, but not that it was allocated by the caller's CRT library. Rozważmy na przykład blok alokowany przy użyciu wersji programu Visual Studio 2010 biblioteki CRT.For example, consider a block allocated by using the Visual Studio 2010 version of the CRT library. Jeśli funkcja _CrtIsValidHeapPointer wyeksportowana przez wersję programu Visual Studio 2012 biblioteki CRT testuje wskaźnik, zwraca wartość true.If the _CrtIsValidHeapPointer function exported by the Visual Studio 2012 version of the CRT library tests the pointer, it returns TRUE. Nie jest to już przydatny test.This is no longer a useful test. W wersjach biblioteki CRT przed Visual Studio 2010 funkcja służy do upewnienia się, że określony adres pamięci znajduje się w stercie lokalnej.In versions of the CRT library before Visual Studio 2010, the function is used to ensure that a specific memory address is within the local heap. Sterta lokalna dotyczy sterty utworzonej i zarządzanej przez określone wystąpienie biblioteki wykonawczej C.The local heap refers to the heap created and managed by a particular instance of the C run-time library. Jeśli biblioteka dołączana dynamicznie (DLL) zawiera statyczny link do biblioteki wykonawczej, ma własne wystąpienie sterty czasu wykonywania i w związku z tym jego własne sterty niezależnie od sterty lokalnej aplikacji.If a dynamic-link library (DLL) contains a static link to the run-time library, it has its own instance of the run-time heap, and therefore its own heap, independent of the application's local heap. Gdy _DEBUG nie jest zdefiniowany, wywołania do _CrtIsValidHeapPointer są usuwane podczas przetwarzania wstępnego.When _DEBUG is not defined, calls to _CrtIsValidHeapPointer are removed during preprocessing.

Ponieważ ta funkcja zwraca wartość TRUE lub FALSE, można ją przesłać do jednego z _ASSERTych makr, aby utworzyć prosty mechanizm obsługi błędów debugowania.Because this function returns TRUE or FALSE, it can be passed to one of the _ASSERT macros to create a simple debugging error handling mechanism. Poniższy przykład powoduje niepowodzenie potwierdzenia, jeśli określony adres nie znajduje się na stercie lokalnej:The following example causes an assertion failure if the specified address is not located within the local heap:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Aby uzyskać więcej informacji o tym, jak _CrtIsValidHeapPointer mogą być używane z innymi funkcjami i makrami debugowania, zobacz makra na potrzeby raportowania.For more information about how _CrtIsValidHeapPointer can be used with other debug functions and macros, see Macros for Reporting. Aby uzyskać informacje o tym, jak bloki pamięci są przydzielane, inicjowane i zarządzane w wersji debugowania sterty podstawowej, zobacz szczegóły sterty debugowania CRT.For information about how memory blocks are allocated, initialized, and managed in the debug version of the base heap, see CRT Debug Heap Details.

WymaganiaRequirements

ProceduraRoutine Wymagany nagłówekRequired header
_CrtIsValidHeapPointer_CrtIsValidHeapPointer <crtdbg.h>

Aby uzyskać więcej informacji o zgodności, zobacz zgodność.For more compatibility information, see Compatibility.

BibliotekiLibraries

Debuguj wersje wyłącznie bibliotek uruchomieniowych C .Debug versions of C run-time libraries only.

PrzykładExample

W poniższym przykładzie pokazano, jak sprawdzić, czy pamięć jest prawidłowa, gdy jest używana z bibliotekami uruchomieniowymi C przed programem Visual Studio 2010.The following example demonstrates how to test whether memory is valid when it is used with C run-time libraries before Visual Studio 2010. Ten przykład jest dostarczany dla użytkowników starszego kodu biblioteki CRT.This example is provided for users of legacy CRT library code.

// 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.

Zobacz teżSee also

Procedury debugowaniaDebug Routines