_CrtSetAllocHook
Menginstal fungsi alokasi yang ditentukan klien dengan menghubungkannya ke dalam proses alokasi memori debug run-time C (hanya versi debug).
Sintaks
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
Parameter
allocHook
Fungsi alokasi baru yang ditentukan klien untuk menghubungkan ke dalam proses alokasi memori debug run-time C.
Nilai hasil
Mengembalikan fungsi kait alokasi yang ditentukan sebelumnya, atau NULL
jika allocHook
adalah NULL
.
Keterangan
_CrtSetAllocHook
memungkinkan aplikasi untuk menghubungkan fungsi alokasinya sendiri ke dalam proses alokasi memori pustaka debug run-time C. Akibatnya, setiap panggilan ke fungsi alokasi debug untuk mengalokasikan, merealokasi, atau membebaskan blok memori memicu panggilan ke fungsi hook aplikasi. _CrtSetAllocHook
menyediakan aplikasi dengan metode mudah untuk menguji bagaimana aplikasi menangani situasi memori yang tidak mencukup, kemampuan untuk memeriksa pola alokasi, dan kesempatan untuk mencatat informasi alokasi untuk analisis nanti. Jika _DEBUG
tidak ditentukan, panggilan ke _CrtSetAllocHook
akan dihapus selama praproscesing.
Fungsi ini _CrtSetAllocHook
menginstal fungsi alokasi baru yang ditentukan klien yang ditentukan dan allocHook
mengembalikan fungsi hook yang ditentukan sebelumnya. Contoh berikut menunjukkan bagaimana kait alokasi yang ditentukan klien harus diprototi:
int YourAllocHook( int allocType, void *userData, size_t size,
int blockType, long requestNumber,
const unsigned char *filename, int lineNumber);
Argumen allocType
menentukan jenis operasi alokasi (_HOOK_ALLOC
, _HOOK_REALLOC
, dan _HOOK_FREE
) yang memicu panggilan ke fungsi kait alokasi. Ketika jenis alokasi pemicu adalah _HOOK_FREE
, userData
adalah penunjuk ke bagian data pengguna dari blok memori yang akan dibebaskan. Namun, ketika jenis alokasi pemicu adalah _HOOK_ALLOC
atau _HOOK_REALLOC
, userData
adalah NULL
karena blok memori belum dialokasikan.
size
menentukan ukuran blok memori dalam byte, blockType
menunjukkan jenis blok memori, requestNumber
adalah nomor urutan alokasi objek blok memori, dan, jika tersedia, filename
dan lineNumber
menentukan nama file sumber dan nomor baris tempat operasi alokasi pemicu dimulai.
Setelah fungsi kait selesai diproses, fungsi tersebut harus mengembalikan nilai Boolean, yang memberi tahu proses alokasi run-time C utama cara melanjutkan. Ketika fungsi kait ingin proses alokasi utama berlanjut seolah-olah fungsi kait tidak pernah dipanggil, maka fungsi kait harus mengembalikan TRUE
, yang menyebabkan operasi alokasi pemicu asli dijalankan. Fungsi kait dapat mengumpulkan dan menyimpan informasi alokasi untuk analisis nanti, tanpa mengganggu operasi alokasi saat ini atau status timbunan debug.
Ketika fungsi kait ingin proses alokasi utama berlanjut seolah-olah operasi alokasi pemicu dipanggil dan gagal, maka fungsi kait harus mengembalikan FALSE
. Fungsi kait dapat mensimulasikan berbagai kondisi memori dan status tumpukan debug untuk menguji bagaimana aplikasi menangani setiap situasi.
Untuk menghapus fungsi kait, teruskan NULL
ke _CrtSetAllocHook
.
Untuk informasi selengkapnya tentang bagaimana _CrtSetAllocHook
dapat digunakan dengan fungsi manajemen memori lainnya atau cara menulis fungsi kait yang ditentukan klien Anda sendiri, lihat Penulisan fungsi kait debug.
Catatan
_CrtSetAllocHook
tidak didukung di bawah /clr:pure. Opsi pengkompilasi /clr:pure dan /clr:safe tidak digunakan lagi di Visual Studio 2015 dan dihapus di Visual Studio 2017.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Pustaka
Debug versi pustaka run-time C saja.
Contoh
Untuk sampel cara menggunakan _CrtSetAllocHook
, lihat crt_dbg2
.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk