Bagikan melalui


_calloc_dbg

Mengalokasikan blok memori di tumpukan dengan ruang ekstra untuk header debugging dan menimpa buffer (hanya versi debug).

Sintaks

void *_calloc_dbg(
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber
);

Parameter

number
Jumlah blok memori yang diminta.

size
Ukuran yang diminta dari setiap blok memori (byte).

blockType
Jenis blok memori yang diminta: _CLIENT_BLOCK atau _NORMAL_BLOCK.

Untuk informasi tentang jenis blok alokasi dan cara penggunaannya, lihat Jenis blok pada tumpukan debug.

filename
Penunjuk ke nama file sumber yang meminta operasi alokasi atau NULL.

linenumber
Nomor baris dalam file sumber tempat operasi alokasi diminta atau NULL.

Parameter filename dan linenumber hanya tersedia ketika _calloc_dbg telah dipanggil secara eksplisit atau _CRTDBG_MAP_ALLOC konstanta pra-prosesor telah ditentukan.

Nilai hasil

Setelah berhasil diselesaikan, fungsi ini mengembalikan penunjuk ke bagian pengguna dari blok memori terakhir yang dialokasikan, memanggil fungsi handler baru, atau mengembalikan NULL. Untuk deskripsi lengkap tentang perilaku pengembalian, lihat bagian Keterangan. Untuk informasi selengkapnya tentang bagaimana fungsi handler baru digunakan, lihat calloc fungsi .

Keterangan

_calloc_dbg adalah versi debug dari calloc fungsi. Ketika _DEBUG tidak ditentukan, setiap panggilan ke _calloc_dbg dikurangi menjadi panggilan ke calloc. Baik calloc dan _calloc_dbg alokasikan number blok memori di timbunan dasar, tetapi _calloc_dbg menawarkan beberapa fitur penelusuran kesalahan:

  • Buffer di salah satu sisi bagian pengguna blok untuk menguji kebocoran.

  • Parameter jenis blok untuk melacak jenis alokasi tertentu.

  • filename/linenumber informasi untuk menentukan asal permintaan alokasi.

_calloc_dbg mengalokasikan setiap blok memori dengan sedikit lebih banyak ruang daripada yang diminta size. Ruang ekstra digunakan oleh manajer timbunan debug untuk menautkan blok memori debug dan untuk menyediakan aplikasi dengan informasi header debug dan menimpa buffer. Ketika blok dialokasikan, bagian pengguna dari blok diisi dengan nilai 0xCD, dan masing-masing buffer penimpaan diisi dengan 0xFD.

_calloc_dbgerrno diatur ke ENOMEM jika alokasi memori gagal; EINVAL dikembalikan jika jumlah memori yang diperlukan (termasuk overhead yang disebutkan sebelumnya) melebihi _HEAP_MAXREQ. Untuk informasi tentang ini dan kode kesalahan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Untuk informasi tentang bagaimana blok memori dialokasikan, diinisialisasi, dan dikelola dalam versi debug timbunan dasar, lihat detail timbunan debug CRT. Untuk informasi tentang perbedaan antara memanggil fungsi timbunan standar dan versi debug, lihat Men-debug versi fungsi alokasi timbunan.

Persyaratan

Rutin Header yang diperlukan
_calloc_dbg <crtdbg.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_callocd.c
// This program uses _calloc_dbg to allocate space for
// 40 long integers. It initializes each element to zero.

#include <stdio.h>
#include <malloc.h>
#include <crtdbg.h>

int main( void )
{
    long *bufferN, *bufferC;

    // Call _calloc_dbg to include the filename and line number
    // of our allocation request in the header and also so we can
    // allocate CLIENT type blocks specifically
    bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
    bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );
    if( bufferN != NULL && bufferC != NULL )
        printf( "Allocated memory successfully\n" );
    else
        printf( "Problem allocating memory\n" );

    / _free_dbg must be called to free CLIENT type blocks
    free( bufferN );
    _free_dbg( bufferC, _CLIENT_BLOCK );
}
Allocated memory successfully

Lihat juga

Rutinitas debug
calloc
_malloc_dbg
_DEBUG