_calloc_dbg
Hata ayıklama başlığı için bir bellek bloğu yığınındaki ek alan ile sayısı ayırır ve arabellekleri (yalnızca hata ayıklama sürümü) üzerine.
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parametreler
num
İstenen bellek bloğu sayısı.size
Her bellek bloğu (bayt) boyutunu istedi.blockType
Bellek bloğu türü istendi: _CLIENT_BLOCK veya _NORMAL_BLOCK.Ayırma blok türleri ve nasıl kullanılacakları hakkında daha fazla bilgi için bkz: Türler bloklar hata ayıklama öbek üzerindeki.
filename
Ayırma işleminin istenen kaynak dosyasının adını gösteren işaretçi veya NULL.linenumber
Burada ayırma işlemi istendi kaynak dosyadaki satır veya NULL.
filename Ve linenumber parametreleri yalnızca kullanılabilir ne zaman _calloc_dbg açıkça adlı veya _crtdbg_map_alloc Önişlemci sabit tanımlı.
Dönüş Değeri
Başarılı tamamlama, bu işlevi son ayrılan bellek bloğu kullanıcı bölümüne bir işaretçi döndürür, yeni işleyici işlevi çağıran veya verir NULL. Dönüş davranış eksiksiz bir açıklaması için açıklamalar bölümüne bakın. Yeni bir işleyici işlevi nasıl kullanıldığı hakkında daha fazla bilgi için bkz: calloc işlevi.
Notlar
_calloc_dbghata ayıklama sürümü calloc işlevi. Zaman _debug tanımlı değil, her çağrı için _calloc_dbg çağrısı nedeniyle sınırlı calloc. Her ikisi de calloc ve _calloc_dbg tahsis num bellek öbeğe temel engeller, ancak _calloc_dbg birkaç hata ayıklama özellikleri sunar:
Arabellekler için sızıntıları sınamak için blok kullanıcı bölümünü her iki tarafına.
Özel ayırma türleri izlemek için bir blok türü parametresi.
filename/linenumber ayırma isteklerini kaynağını belirlemek için bilgi.
_calloc_dbgher bellek bloğu ile istenen'den biraz daha fazla yer ayıran size. Ek alan tarafından hata ayıklama yığın yöneticisinin hata ayıklama bellek bloklarını bağlama ve uygulama ile hata ayıklama üstbilgi bilgileri sağlamak ve arabellek üzerine yazmak için kullanılır. Blok tahsis edilirken blok kullanıcı bölümünü 0xCD değeri girilir ve 0xFD ile doldurulmuş her Yaz arabellekler.
_calloc_dbgayarlar errno için ENOMEM bir bellek ayırma başarısız olursa; EINVAL(daha önce sözü edilen genel giderleri dahil) gerekli bellek miktarını aşıyorsa iade _HEAP_MAXREQ. Bu ve diğer hata kodları hakkında daha fazla bilgi için bkz: errno, _doserrno, _sys_errlist ve _sys_nerr.
Nasıl bellek bloklarını tahsis başlatıldı ve yönetilen temel yığın hata ayıklama sürümü hakkında daha fazla bilgi için bkz: bellek yönetimi ve hata ayıklama öbek. Standart yığın işlevi hata ayıklama sürümünü ve bir uygulama hata ayıklama yapısında arama arasındaki farklar hakkında daha fazla bilgi için bkz: hata ayıklama sürümü karşı Bankası sürümü kullanarak.
Gereksinimler
Yordamı |
Gerekli başlık |
---|---|
_calloc_dbg |
<crtdbg.h> |
Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.
Ö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 );
}
.NET Framework Eşdeğeri
Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.