Share via


_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);
}

Voir aussi

Routines de débogage