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