_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_REALLOC
et _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_REALLOC
est 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
.