_CrtIsValidHeapPointer
Zweryfikuje, że określony wskaźnik jest lokalna sterta (tylko wersja debugowania).
int _CrtIsValidHeapPointer(
const void *userData
);
Parametry
- userData
Wskaźnik na początku bloku alokacji pamięci.
Wartość zwracana
_CrtIsValidHeapPointerZwraca wartość PRAWDA, jeśli określony wskaźnik znajduje się w lokalnym sterty.W przeciwnym wypadku funkcja zwraca wartość FALSE.
Uwagi
_CrtIsValidHeapPointer Funkcja jest używana w celu zapewnienia, że adres pamięci jest na stercie lokalnych.Lokalna sterta odnosi się do sterty tworzony i zarządzany przez konkretnego wystąpienia c run-time library.Jeśli biblioteka dołączana dynamicznie (DLL) zawiera statycznej łącze do run-time library, ma swoją własną instancję sterty run-time, i dlatego swojej własnej sterty, niezależnie od aplikacji lokalna sterta.Gdy _DEBUG nie jest zdefiniowana, wzywa do _CrtIsValidHeapPointer są usuwane w czasie wstępnego przetwarzania.
Ponieważ ta funkcja zwraca wartość PRAWDA lub FAŁSZ, mogą być przekazywane do jednego z _ASSERT makra, aby utworzyć prosty błąd debugowania mechanizmu obsługi.Poniższy przykład powoduje błąd potwierdzenia, jeżeli określony adres nie jest umieszczony w lokalnym stosu:
_ASSERTE( _CrtIsValidHeapPointer( userData ) );
Aby uzyskać więcej informacji dotyczących sposobu _CrtIsValidHeapPointer może być używany z innymi funkcjami debugowania i makr, zobacz Za pomocą makra dla weryfikacji i sprawozdawczości.Informacje o jak bloków pamięci są przydzielane, zainicjowany i zarządzane w wersji debugowej bazowy sterty, zobacz Zarządzanie pamięcią i debugowania sterty.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
_CrtIsValidHeapPointer |
<crtdbg.h> |
Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.
Biblioteki
Debug wersje biblioteki uruchomieniowej c tylko.
Przykład
// 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);
}
Dane wyjściowe
my_pointer has read and write accessibility.
my_pointer is within the local heap.
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.