_CrtIsValidHeapPointer
Vérifie qu'un pointeur spécifié est dans le tas local (version debug uniquement).
int _CrtIsValidHeapPointer(
const void *userData
);
Paramètres
- userData
Pointeur vers le début d'un bloc de mémoire alloué.
Valeur de retour
retourne TRUE d'_CrtIsValidHeapPointer si le pointeur est spécifié dans le tas local.Sinon, la fonction retourne FALSE.
Notes
la fonction d' _CrtIsValidHeapPointer est utilisée pour garantir qu'une adresse mémoire spécifique est dans le tas local.Le tas local fait référence au tas créé et géré par une instance particulière de la bibliothèque Runtime C.Si une bibliothèque de (DLL) liens dynamiques contient un lien statique vers la bibliothèque Runtime, elle possède sa propre instance du tas au moment de l'exécution, et par conséquent son propre le tas, indépendamment du tas local de l'application.Lorsque _DEBUG n'est pas défini, les appels à _CrtIsValidHeapPointer sont supprimés pendant le prétraitement.
Étant donné que cette fonction retourne TRUE ou FALSE, elle peut être passée à l'une des macros de _ASSERT créer un mécanisme simple de gestion des erreurs d'erreur de débogage.L'exemple suivant crée un échec d'assertion si l'adresse spécifiée ne se trouve pas dans le tas local :
_ASSERTE( _CrtIsValidHeapPointer( userData ) );
Pour plus d'informations sur la façon dont _CrtIsValidHeapPointer peut être utilisé avec d'autres fonctions et des macros de débogage, consultez À l'aide de les macros pour la vérification et la création de rapports.Pour plus d'informations sur la manière dont les blocs de mémoire sont alloués, initialisés, et gérés dans la version debug de tas de base, consultez gestion de la mémoire et le tas de débogage.
Configuration requise
routine |
en-tête requis |
---|---|
_CrtIsValidHeapPointer |
<crtdbg.h> |
Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.
bibliothèques
Versions debug de Bibliothèques runtime C uniquement.
Exemple
// 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);
}
Sortie
my_pointer has read and write accessibility.
my_pointer is within the local heap.
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.