_CrtSetBreakAlloc
Mengatur titik henti pada nomor urutan alokasi objek tertentu (hanya versi debug).
Sintaks
long _CrtSetBreakAlloc(
long lBreakAlloc
);
Parameter
lBreakAlloc
Nomor pesanan alokasi, untuk mengatur titik henti.
Nilai hasil
Mengembalikan nomor urutan alokasi objek sebelumnya yang memiliki set titik henti.
Keterangan
_CrtSetBreakAlloc
memungkinkan aplikasi untuk melakukan deteksi kebocoran memori dengan melanggar pada titik alokasi memori tertentu dan melacak kembali ke asal permintaan. Fungsi ini menggunakan nomor urutan alokasi objek berurutan yang ditetapkan ke blok memori ketika dialokasikan dalam timbunan. Jika _DEBUG
tidak ditentukan, panggilan ke _CrtSetBreakAlloc
akan dihapus selama praproscesing.
Nomor urutan alokasi objek disimpan di lRequest
bidang _CrtMemBlockHeader
struktur, yang ditentukan dalam Crtdbg.h. Ketika informasi tentang blok memori dilaporkan oleh salah satu fungsi dump debug, angka ini diapit kurung kurawal, seperti {36}.
Untuk informasi selengkapnya tentang bagaimana _CrtSetBreakAlloc
dapat digunakan dengan fungsi manajemen memori lainnya, lihat Melacak permintaan alokasi timbunan. Untuk informasi selengkapnya tentang bagaimana blok memori dialokasikan, diinisialisasi, dan dikelola dalam versi debug timbunan dasar, lihat detail timbunan debug CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_CrtSetBreakAlloc |
<crtdbg.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Pustaka
Debug versi pustaka run-time C saja.
Contoh
// 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);
}