_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 NULL
istenen 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 calloc
indirgenir. _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 size
biraz 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_dbg
ENOMEM
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_MAXREQ
döndürülür. Bu ve diğer hata kodları hakkında bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _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