Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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);
}