Udostępnij za pośrednictwem


_CrtSetBreakAlloc

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

Zobacz też

Procedury debugowania