Partager via


_CrtSetAllocHook

Installe une fonction d’allocation définie par le client en la raccordant au processus d’allocation de mémoire de débogage du runtime C (version de débogage uniquement).

Syntaxe

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Paramètres

allocHook
Nouvelle fonction d’allocation définie par le client à raccorder au processus d’allocation de mémoire de débogage du runtime C

Valeur retournée

Retourne la fonction de raccordement d’allocation définie, ou NULL si allocHook est NULL.

Notes

_CrtSetAllocHook permet à une application de raccorder sa propre fonction d’allocation au processus d’allocation de mémoire de bibliothèque de débogage du runtime C. Ainsi, chaque appel à une fonction d’allocation de débogage pour allouer, réallouer ou libérer un bloc de mémoire déclenche un appel à la fonction de raccordement de l’application. _CrtSetAllocHook fournit à une application 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. Quand _DEBUG n’est pas défini, les appels à _CrtSetAllocHook sont supprimés lors du prétraitement.

La fonction _CrtSetAllocHook installe la nouvelle fonction d’allocation définie par le client spécifiée dans allocHook et retourne la fonction de raccordement définie. 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);

L’argument allocType spécifie le type d’opération d’allocation (_HOOK_ALLOC, _HOOK_REALLOCet _HOOK_FREE) qui a déclenché l’appel à la fonction de hook de l’allocation. Quand le type d’allocation de déclenchement est _HOOK_FREE, userData est un pointeur désignant la section de données utilisateur du bloc de mémoire sur le point d’être libéré. Toutefois, lorsque le type d’allocation de déclenchement est _HOOK_ALLOC ou _HOOK_REALLOCest userData NULL dû au fait que le bloc de mémoire n’a pas encore été alloué.

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

Une fois que la fonction de raccordement a terminé le traitement, elle doit retourner une valeur booléenne, qui indique la marche à suivre au processus d’allocation du runtime C principal. Lorsque la fonction de hook souhaite que le processus d’allocation principal continue comme si la fonction de hook n’avait jamais été appelée, la fonction de hook doit retourner TRUE, ce qui entraîne l’exécution de l’opération d’allocation déclenchée d’origine. La fonction de raccordement peut collecter et enregistrer des informations d’allocation pour une analyse ultérieure, sans interférer avec l’opération d’allocation actuelle ou l’état du tas de débogage.

Quand la fonction de raccordement souhaite que le processus d’allocation principal se poursuive comme si l’opération d’allocation de déclenchement avait été appelée et avait échoué, elle doit retourner FALSE. La fonction de raccordement peut simuler un large éventail de conditions de mémoire et déboguer des états de tas pour tester la façon dont l’application gère chaque situation.

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

Pour plus d’informations sur l’utilisation _CrtSetAllocHook d’autres fonctions de gestion de la mémoire ou sur l’écriture de vos propres fonctions de hook définies par le client, consultez l’écriture de la fonction de raccordement de débogage.

Remarque

_CrtSetAllocHook n’est pas pris en charge sous /clr :pure. Les options du compilateur /clr :pure et /clr :safe sont déconseillées dans Visual Studio 2015 et supprimées dans Visual Studio 2017.

Spécifications

Routine En-tête requis
_CrtSetAllocHook <crtdbg.h>

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

Bibliothèques

Uniquement les versions de débogage des bibliothèques Runtime C.

Exemple

Pour obtenir un exemple d’utilisation _CrtSetAllocHook, consultez crt_dbg2.

Voir aussi

Routines de débogage
_CrtGetAllocHook