Sdílet prostřednictvím


_CrtSetBreakAlloc

Nastaví zarážku na zadaném čísle pořadí přidělení objektů (pouze ladicí verze).

Syntaxe

long _CrtSetBreakAlloc(
   long lBreakAlloc
);

Parametry

lBreakAlloc
Číslo pořadí přidělení, pro které chcete nastavit zarážku.

Vrácená hodnota

Vrátí předchozí číslo pořadí přidělení objektů, které mělo nastaveno zarážku.

Poznámky

_CrtSetBreakAlloc umožňuje aplikaci provést detekci nevracení paměti přerušením v určitém bodě přidělení paměti a trasováním zpět na původ požadavku. Tato funkce používá sekvenční číslo pořadí přidělení objektu přiřazené bloku paměti při přidělení na haldě. Pokud _DEBUG není definováno, volání, která _CrtSetBreakAlloc se mají odebrat během předběžného zpracování.

Číslo pořadí přidělení objektu je uloženo v lRequest poli _CrtMemBlockHeader struktury definované v Crtdbg.h. Pokud jsou informace o bloku paměti hlášeny jednou z funkcí výpisu ladění, toto číslo je uzavřeno ve složených závorkách, například {36}.

Další informace o tom, jak _CrtSetBreakAlloc se dají použít s jinými funkcemi správy paměti, najdete v tématu Sledování žádostí o přidělení haldy. Další informace o přidělování, inicializaci a správě bloků paměti ve verzi ladění základní haldy naleznete v podrobnostech haldy ladění CRT.

Požadavky

Rutina Požadovaný hlavičkový soubor
_CrtSetBreakAlloc <crtdbg.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Ladění pouze verzí knihoven runtime jazyka C.

Příklad

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

Viz také

Rutiny ladění