Bagikan melalui


_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);
}

Lihat juga

Rutinitas debug