Share via


_CrtSetBreakAlloc

Définit un point d'arrêt sur un numéro de commande spécifié d'allocation d'objets volumineux (version debug uniquement).

long _CrtSetBreakAlloc( 
   long lBreakAlloc 
);

Paramètres

  • lBreakAlloc
    Nombre de commande d'allocation, pour lequel définir le point d'arrêt.

Valeur de retour

Retourne le numéro de commande d'allocation d'objet qui a eu un point d'arrêt défini.

Notes

_CrtSetBreakAlloc permet à une application d'exécuter la détection des fuites de mémoire en désactivant à un point spécifique d'allocation de mémoire et en suivant à l'origine de la demande.La fonction utilise le numéro de commande séquentiel d'allocation d'objet assigné au bloc de mémoire lorsqu'elle a été allouée dans le tas.Lorsque _DEBUG n'est pas défini, les appels à _CrtSetBreakAlloc sont supprimés pendant le prétraitement.

Le numéro de commande d'allocation d'objets est stocké dans le champ lRequest de la structure de _CrtMemBlockHeader , défini dans Crtdbg.h.Lorsque les informations sur un bloc de mémoire sont stockées par une des fonctions de vidage du débogage, ce nombre est placé entre accolades, tel que {36}.

Pour plus d'informations sur la façon dont _CrtSetBreakAlloc peut être utilisé avec d'autres fonctions de gestion de la mémoire, consultez Demandes d'allocation du tas de suivi.

Configuration requise

routine

en-tête requis

_CrtSetBreakAlloc

<crtdbg.h>

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

bibliothèques

Versions debug de Bibliothèques runtime C uniquement.

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);
        _crtBreakAlloc = 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);
}

É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