_CrtSetBreakAlloc
Définit un point d'arrêt sur un numéro d'ordre d'allocation d'objet spécifié (version de débogage uniquement).
Syntaxe
long _CrtSetBreakAlloc(
long lBreakAlloc
);
Paramètres
lBreakAlloc
Numéro d'ordre d'allocation pour lequel le point d'arrêt est défini.
Valeur retournée
Retourne le numéro d'ordre d'allocation d'objet précédent qui avait un point d'arrêt défini.
Notes
_CrtSetBreakAlloc
permet à une application de détecter une fuite de mémoire en s'arrêtant à un point d'allocation de mémoire spécifique et en remontant jusqu'à l'origine de la demande. La fonction utilise le numéro d'ordre d'allocation d'objet séquentiel assigné au bloc de mémoire au moment où il a été alloué dans le tas. Quand _DEBUG
n’est pas défini, les appels à _CrtSetBreakAlloc
sont supprimés pendant le prétraitement.
Le numéro d’ordre d’allocation d’objet est stocké dans le lRequest
champ de la _CrtMemBlockHeader
structure, défini dans Crtdbg.h. Lorsque des informations sur un bloc de mémoire sont signalées par l’une des fonctions de vidage de débogage, ce nombre est placé entre accolades, telles que {36}.
Pour plus d’informations sur l’utilisation de _CrtSetBreakAlloc
avec d’autres fonctions de gestion de la mémoire, consultez Demandes d’allocation de tas de suivi. Pour plus d’informations sur la façon dont les blocs de mémoire sont alloués, initialisés et gérés dans la version de débogage du tas de base, consultez Détails du tas de débogage CRT.
Spécifications
Routine | En-tête requis |
---|---|
_CrtSetBreakAlloc |
<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
// crt_setbrkal.c
// compile with: -D_DEBUG /MTd -Od -Zi -W3 /c /link -verbose:lib -debug
/*
* In this program, a call is made to the _CrtSetBreakAlloc routine
* to verify that the debugger halts program execution when it reaches
* a specified allocation number.
*/
#include <malloc.h>
#include <crtdbg.h>
int main( )
{
long allocReqNum;
char *my_pointer;
/*
* Allocate "my_pointer" for the first
* time and ensure that it gets allocated correctly
*/
my_pointer = malloc(10);
_CrtIsMemoryBlock(my_pointer, 10, &allocReqNum, NULL, NULL);
/*
* Set a breakpoint on the allocation request
* number for "my_pointer"
*/
_CrtSetBreakAlloc(allocReqNum+2);
/*
* Alternate freeing and reallocating "my_pointer"
* to verify that the debugger halts program execution
* when it reaches the allocation request
*/
free(my_pointer);
my_pointer = malloc(10);
free(my_pointer);
my_pointer = malloc(10);
free(my_pointer);
}