Partager via


_CrtSetAllocHook

Installe une fonction d'allocation définie par le client en l'accrochant dans le processus d'allocation de mémoire de débogage du runtime C (version debug uniquement).

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook 
);

Paramètres

  • allocHook
    Nouvelle fonction d'allocation définie par le client de se connecter à le processus d'allocation de mémoire de débogage du runtime C.

Valeur de retour

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

Notes

_CrtSetAllocHook permet à une application de raccorder sa propre fonction d'allocation dans le processus d'allocation de mémoire de la bibliothèque de débogage du runtime C.Par conséquent, chaque appel à une fonction d'allocation de débogage pour allouer, réaffecter, ou la libération d'un bloc de mémoire déclenche un appel à la fonction de raccordement de l'application._CrtSetAllocHook fournit à une demande une méthode facile de tester la manière dont l'application gère les situations de mémoire insuffisante, la possibilité d'examiner les modèles d'allocation, et la possibilité d'enregistrer les informations des allocations en vue d'une analyse ultérieure.Lorsque _DEBUG n'est pas défini, les appels à _CrtSetAllocHook sont supprimés pendant le prétraitement.

La fonction d' _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 précédemment.L'exemple suivant montre comment un raccordement d'allocation défini par le client doit être prototype :

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

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

size spécifie la taille du bloc de mémoire en octets, blockType indique le type de bloc de mémoire, requestNumber est le numéro de commande d'allocation d'objet du bloc de mémoire, et, si disponible, filename et lineNumber spécifiez le nom de fichier et le numéro de ligne source où l'opération de déclenchement d'allocation a été initialisée.

Une fois que la fonction de raccordement a fini de traiter, elle doit retourner une valeur booléenne, qui indique au processus d'allocation principal runtime C comment continuer.Lorsque la fonction de raccordement souhaite le processus d'allocation principal pour continuer comme si la fonction de raccordement n'a jamais été appelée, la fonction de raccordement doit retourner TRUE.Cela provoque l'opération de déclenchement d'origine d'allocation à exécuter.Cette implémentation, la fonction de raccordement peut rassembler et enregistrer des informations d'allocation en vue d'une analyse ultérieure, sans interférer avec l'opération d'allocation ou l'état actuel du tas de débogage.

Lorsque la fonction de raccordement souhaite le processus d'allocation principal pour continuer comme si l'opération de déclenchement d'allocation a été appelée et il a échoué, la fonction de raccordement doit retourner FALSE.Cette implémentation, la fonction de raccordement peut simuler une large gamme d'états de mémoire et des rapports de tas de débogage pour tester la façon dont l'application gère chaque situation.

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

Pour plus d'informations sur la façon dont _CrtSetAllocHook peut être utilisé avec d'autres fonctions de gestion de la mémoire ou comment écrire vos propres fonctions de raccordement définies par le client, consultez l' écrire vos propres fonctions de raccordement de débogage.

[!REMARQUE]

_CrtSetAllocHook n'est pas pris en charge sous /clr:pure.

Configuration requise

routine

en-tête requis

_CrtSetAllocHook

<crtdbg.h>

Pour plus d'informations de compatibilité, consultez compatibilité dans l'introduction.

bibliothèques

Versions debug de Bibliothèques runtime C uniquement.

Exemple

Pour un exemple d'utilisation _CrtSetAllocHook, consultez crt_dbg2.

É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é.

Voir aussi

Référence

Déboguez des routines

_CrtGetAllocHook