_calloc_dbg
Přidělí počet bloků paměti haldy s dalším prostorem pro ladění záhlaví a přepsat vyrovnávací paměti (pouze ladicí verzi).
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parametry
num
Požadovaný počet bloků paměti.size
Požadovaná velikost každého bloku paměti (bajty).blockType
Požádal o typu bloku paměti: _CLIENT_BLOCK nebo _NORMAL_BLOCK.Informace o typech bloku přidělení a jejich použití naleznete v tématutypů bloků na ladění haldy.
filename
Ukazatel na název zdrojového souboru, který požaduje operaci přidělení nebo NULL.linenumber
Číslo zdrojového souboru, kde byla požadována operace rozdělení řádku nebo NULL.
filename a linenumber parametry jsou k dispozici pouze při _calloc_dbg byla volána explicitně nebo _CRTDBG_MAP_ALLOC byla definována konstanta preprocesoru.
Vrácená hodnota
Po úspěšném ukončení této funkce vrací ukazatel na část poslední blok paměti přidělené uživateli, volá nové obslužné rutiny nebo vrátí NULL.Úplný popis chování vratky naleznete v části poznámky.Další informace o použití nové funkce obslužné rutiny naleznete v tématu calloc funkce.
Poznámky
_calloc_dbgje ladicí verze calloc funkce.Při _DEBUG není definována, každé volání _calloc_dbg se snižuje o volání calloc.Obě calloc a _calloc_dbg přidělit num bloky paměti v základní haldy, ale _calloc_dbg nabízí několik funkcí pro ladění:
Ve vyrovnávací paměti na obou stranách uživatele část bloku zkouška na těsnost.
Parametr typu bloku ke sledování přidělení určité typy.
filename/linenumber informace k určení původu požadavky na přidělení.
_calloc_dbgpřiděluje každý blok paměti s trochu více místa, než požadovaná size.Další místo je používán správce hald ladění propojení bloky paměti ladění a pro aplikaci s ladicími informacemi hlavičky a přepsat vyrovnávací paměti.Při přidělení bloku uživatele část bloku se doplní hodnota 0xCD a přepsat vyrovnávací paměti se naplní 0xFD.
_calloc_dbgNastaví errno k ENOMEM selhání přidělení paměti; EINVALje vrácena, pokud je větší než množství potřebné paměti (včetně režie již bylo zmíněno dříve) _HEAP_MAXREQ.Další informace o tomto a dalších chybových kódech naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.
Informace o způsobu přidělování, inicializace a správy paměťových bloků v ladicí verzi základní haldy viz Podrobnosti haldy ladění CRT.Informace o rozdílech mezi volání funkce standardní haldy versus jeho ladicí verzi v sestavení ladící verze aplikace naleznete v tématu Ladění verzí funkcí přidělení haldy.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
_calloc_dbg |
<crtdbg.h> |
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
Příklad
// 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 );
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.