Nous recommandons d’utiliser Visual Studio 2017

_CrtSetAllocHook

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Installe une fonction définie par le client de l’allocation par traitement dans le processus d’allocation de mémoire C débogage (version debug uniquement).

_CRT_ALLOC_HOOK _CrtSetAllocHook(  
   _CRT_ALLOC_HOOK allocHook   
);  

Paramètres

allocHook
Nouvelle fonction d’allocation définie par le client pour intégrer le processus de répartition de mémoire de débogage du runtime C.

Retourne la fonction de raccordement d’allocation défini précédemment, ou NULL si allocHook est NULL.

_CrtSetAllocHookpermet à une application raccorder sa propre fonction d’allocation dans le processus d’allocation mémoire bibliothèque C Runtime debug. Par conséquent, chaque appel à une fonction de l’allocation de débogage pour allouer, réallouer ou libérer un déclencheurs de bloc de mémoire à un appel à la fonction de raccordement de l’application. _CrtSetAllocHookFournit une application avec une méthode simple pour tester comment l’application gère les situations de mémoire insuffisante, la possibilité d’examiner les modèles d’allocation et la possibilité de consigner les informations d’allocation pour une analyse ultérieure. Lors de la _DEBUG n’est pas défini, les appels à _CrtSetAllocHook sont supprimés lors du prétraitement.

Le _CrtSetAllocHook fonction installe la nouvelle fonction d’allocation définie par le client spécifiée dans allocHook et retourne la fonction de raccordement défini précédemment. L’exemple suivant montre comment un raccordement d’allocation défini par le client doit être prototypé :

int YourAllocHook( int allocType, void *userData, size_t size, int   
blockType, long requestNumber, const unsigned char *filename, int   
lineNumber);  

Le allocType argument spécifie le type de l’opération d’allocation (_HOOK_ALLOC, _HOOK_REALLOC, et _HOOK_FREE) qui a déclenché l’appel à la fonction de raccordement de l’allocation. Lorsque le type d’allocation de déclenchement est _HOOK_FREE, userData est un pointeur vers la section de données utilisateur du bloc de mémoire sur le point d’être libérées. Toutefois, lorsque le type d’allocation de déclenchement est _HOOK_ALLOC ou _HOOK_REALLOC, userData est NULL car le bloc de mémoire n’a pas encore été alloué.

sizeSpécifie la taille de la mémoire de bloc en octets, blockType indique le type du bloc de mémoire, requestNumber est le numéro d’ordre d’objet d’allocation du bloc de mémoire et, le cas échéant, filename et lineNumber spécifier le nombre de nom et la ligne de fichier source où l’opération d’allocation déclenchement a eu lieu.

Une fois que la fonction de raccordement a terminé le traitement, elle doit retourner une valeur booléenne qui indique la façon de continuer le processus d’allocation d’exécution C principal. Lorsque la fonction de raccordement souhaite que le processus d’allocation principal à se poursuivre comme si la fonction de raccordement n’avait jamais été appelée, la fonction de raccordement doit retourner TRUE. Cela provoque l’opération d’allocation de déclenchement d’origine doit être exécuté. À l’aide de cette implémentation, la fonction de raccordement peut rassembler et enregistrer les informations d’allocation pour analyse ultérieure, sans interférer avec l’opération d’allocation actuelle ou l’état du tas de débogage.

Lorsque la fonction de raccordement souhaite que le processus de répartition principale pour continuer comme si l’opération d’allocation déclencheur a été appelée et qu’il n’a pas pu, la fonction de raccordement doit retourner FALSE. À l’aide de cette implémentation, la fonction de raccordement peut simuler un large éventail de conditions de mémoire et les États de tas pour tester comment l’application traite chaque situation de débogage.

Pour désactiver la fonction de raccordement, transmettez NULL à _CrtSetAllocHook.

Pour plus d’informations sur la _CrtSetAllocHook peut être utilisé avec d’autres fonctions de gestion de mémoire ou comment écrire vos propres fonctions de raccordement définie par le client, consultez écriture de fonctions de raccordement de débogage.

System_CAPS_ICON_note.jpg Remarque

_CrtSetAllocHookn’est pas pris en charge sous /clr:pure.

RoutineEn-tête requis
_CrtSetAllocHook<crtdbg.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility dans l’introduction.

Les versions Debug de les bibliothèques Runtime C uniquement.

Pour obtenir un exemple montrant comment utiliser _CrtSetAllocHook, consultez crt_dbg2.

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Routines de débogage
_CrtGetAllocHook

Afficher: