Поделиться через


_CrtSetBreakAlloc

Задает точку останова для указанного порядкового номера выделения объекта (только отладочная версия).

Синтаксис

long _CrtSetBreakAlloc(
   long lBreakAlloc
);

Параметры

lBreakAlloc
Порядковый номер выделения, для которого задается точка останова.

Возвращаемое значение

Возвращает предыдущий порядковый номер выделения объекта, для которого задана точка останова.

Замечания

_CrtSetBreakAlloc позволяет приложению выполнять обнаружение утечки памяти путем останова в определенной точке выделения памяти и обратной трассировки до источника запроса. Функция использует последовательный порядковый номер выделения объекта, назначенный блоку памяти во время выделения в куче. Если _DEBUG это не определено, вызовы _CrtSetBreakAlloc удаляются во время предварительной обработки.

Номер порядка выделения объектов хранится в lRequest поле структуры, определенной _CrtMemBlockHeader в Crtdbg.h. Если сведения о блоке памяти передаются одной из функций дампа отладки, это число заключено в фигурные скобки, например {36}.

Дополнительные сведения о том, как _CrtSetBreakAlloc можно использовать с другими функциями управления памятью, см. в разделе "Отслеживание запросов на выделение кучи". Дополнительные сведения о выделении, инициализации и управлении блоками памяти в отладочной версии базовой кучи см. в сведениях об отладочной куче CRT.

Требования

Маршрут Обязательный заголовок
_CrtSetBreakAlloc <crtdbg.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Библиотеки

Только отладочные версии библиотек времени выполнения языка C.

Пример

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

См. также

Отладка подпрограмм