Aracılığıyla paylaş


_calloc_dbg

Yığındaki bellek bloklarını hata ayıklama üst bilgisi için fazladan alanla ayırır ve arabelleklerin üzerine yazar (yalnızca hata ayıklama sürümü).

Sözdizimi

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

Parametreler

number
İstenen bellek bloğu sayısı.

size
Her bellek bloğunun (bayt) boyutu istendi.

blockType
İstenen bellek bloğu türü: _CLIENT_BLOCK veya _NORMAL_BLOCK.

Ayırma bloğu türleri ve bunların nasıl kullanıldığı hakkında bilgi için bkz . Hata ayıklama yığınındaki blok türleri.

filename
Ayırma işlemi veya NULListenen kaynak dosyanın adına yönelik işaretçi.

linenumber
Kaynak dosyada, ayırma işleminin istendiği satır numarası veya NULL.

filename ve linenumber parametreleri yalnızca açıkça çağrıldığında _calloc_dbg veya önişlemci sabiti _CRTDBG_MAP_ALLOC tanımlandığında kullanılabilir.

Dönüş değeri

Başarıyla tamamlandığında, bu işlev son ayrılan bellek bloğunun kullanıcı bölümüne bir işaretçi döndürür, yeni işleyici işlevini çağırır veya döndürür NULL. Dönüş davranışının tam açıklaması için Açıklamalar bölümüne bakın. Yeni işleyici işlevinin nasıl kullanıldığı hakkında daha fazla bilgi için işleve calloc bakın.

Açıklamalar

_calloc_dbg işlevin calloc hata ayıklama sürümüdür. Tanımlanmadığında _DEBUG , çağrısının her _calloc_dbg biri öğesine yapılan çağrıya callocindirgenir. _calloc_dbg Hem hem de calloc temel yığında bellek bloklarını ayırınnumber, ancak _calloc_dbg çeşitli hata ayıklama özellikleri sunar:

  • Sızıntıları test etmek için bloğun kullanıcı bölümünün her iki tarafındaki arabellekler.

  • Belirli ayırma türlerini izlemek için bir blok türü parametresi.

  • filename/linenumber ayırma isteklerinin kaynağını belirlemeye yönelik bilgiler.

_calloc_dbg her bellek bloğunu istenenden sizebiraz daha fazla alana ayırır. Ek alan, hata ayıklama yığın yöneticisi tarafından hata ayıklama bellek bloklarını bağlamak ve uygulamaya hata ayıklama üst bilgisi bilgileri sağlamak ve arabelleklerin üzerine yazmak için kullanılır. Blok ayrıldığında, bloğun kullanıcı bölümü 0xCD değeriyle doldurulur ve üzerine yazma arabelleklerinin her biri 0xFD ile doldurulur.

_calloc_dbgENOMEM bir bellek ayırmanın başarısız olması durumunda olarak ayarlanırerrno; EINVAL gereken bellek miktarı (daha önce bahsedilen ek yük dahil) aşılırsa _HEAP_MAXREQdöndürülür. Bu ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.

Temel yığının hata ayıklama sürümünde bellek bloklarının nasıl ayrıldığı, başlatıldığı ve yönetildiğini öğrenmek için bkz . CRT hata ayıklama yığını ayrıntıları. Standart yığın işlevini çağırma ile hata ayıklama sürümü arasındaki farklar hakkında bilgi için bkz . Yığın ayırma işlevlerinin hata ayıklama sürümleri.

Gereksinimler

Yordam Gerekli başlık
_calloc_dbg <crtdbg.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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

Ayrıca bkz.

Hata ayıklama yordamları
calloc
_malloc_dbg
_DEBUG