Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ustawia punkt przerwania dla określonego numeru zamówienia alokacji obiektu (tylko wersja debugowania).
Składnia
long _CrtSetBreakAlloc(
long lBreakAlloc
);
Parametry
lBreakAlloc
Numer zamówienia alokacji, dla którego należy ustawić punkt przerwania.
Wartość zwracana
Zwraca poprzedni numer zamówienia alokacji obiektu, który miał ustawiony punkt przerwania.
Uwagi
_CrtSetBreakAlloc umożliwia aplikacji wykrywanie przecieków pamięci przez przerwanie w określonym punkcie alokacji pamięci i śledzenie z powrotem do źródła żądania. Funkcja używa sekwencyjnego numeru zamówienia alokacji obiektu przypisanego do bloku pamięci, gdy został przydzielony w stercie. Gdy _DEBUG nie jest zdefiniowana, wywołania do _CrtSetBreakAlloc są usuwane podczas przetwarzania wstępnego.
Numer zamówienia alokacji obiektu jest przechowywany w lRequest polu struktury zdefiniowanej _CrtMemBlockHeader w pliku Crtdbg.h. Gdy informacje o bloku pamięci są zgłaszane przez jedną z funkcji zrzutu debugowania, ta liczba jest ujęta w nawiasy klamrowe, takie jak {36}.
Aby uzyskać więcej informacji na temat _CrtSetBreakAlloc sposobu użycia z innymi funkcjami zarządzania pamięcią, zobacz Śledzenie żądań alokacji sterty. Aby uzyskać więcej informacji na temat przydzielania, inicjowania i zarządzania blokami pamięci w wersji debugowania sterty podstawowej, zobacz szczegóły sterty debugowania CRT.
Wymagania
| Procedura | Wymagany nagłówek |
|---|---|
_CrtSetBreakAlloc |
<crtdbg.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Biblioteki
Debugowanie tylko wersji bibliotek czasu wykonywania języka C.
Przykład
// 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);
}