_CrtSetBreakAlloc

Sets a breakpoint on a specified object allocation order number (debug version only).

long _CrtSetBreakAlloc( long lBreakAlloc );

Routine Required Header Compatibility
_CrtSetBreakAlloc <crtdbg.h> Win NT, Win 95

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBCD.LIB Single thread static library, debug version
LIBCMTD.LIB Multithread static library, debug version
MSVCRTD.LIB Import library for MSVCRTD.DLL, debug version

Return Value

_CrtSetBreakAlloc returns the previous object allocation order number that had a breakpoint set.

Parameter

lBreakAlloc

Allocation order number, for which to set the breakpoint

Remarks

_CrtSetBreakAlloc allows an application to perform memory leak detection by breaking at a specific point of memory allocation and tracing back to the origin of the request. The function uses the sequential object allocation order number assigned to the memory block when it was allocated in the heap. When _DEBUG is not defined, calls to _CrtSetBreakAlloc are removed during preprocessing.

The object allocation order number is stored in the lRequest field of the _CrtMemBlockHeader structure, defined in CRTDBG.H. When information about a memory block is reported by one of the debug dump functions, this number is enclosed in curly brackets; for example, {36}.

For more information about how _CrtSetBreakAlloc can be used with other memory management functions, see Tracking Heap Allocation Requests.

Example

/*
 * SETBRKAL.C
 * 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>

void 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);
        _crtBreakAlloc = 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);
}

Output

The exception Breakpoint
A breakpoint has been reached.
(0x0000003) occurred in the application at location 0x00401255.

Debug Functions