_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

Rutinitas debug
_CrtGetAllocHook