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