_calloc_dbg
Přidělí bloky paměti v haldě s nadbytečným místem pro hlavičku ladění a přepíše vyrovnávací paměti (pouze ladicí verze).
Syntaxe
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parametry
number
Požadovaný počet paměťových bloků
size
Požadovaná velikost každého bloku paměti (bajtů).
blockType
Požadovaný typ bloku paměti: _CLIENT_BLOCK
nebo _NORMAL_BLOCK
.
Informace o typech bloků přidělení a jejich použití najdete v tématu Typy bloků v haldě ladění.
filename
Ukazatel na název zdrojového souboru, který požadoval operaci přidělení nebo NULL
.
linenumber
Číslo řádku ve zdrojovém souboru, kde byla požadována operace přidělení nebo NULL
.
Parametry filename
jsou linenumber
k dispozici pouze v případech, kdy _calloc_dbg
byla volána explicitně nebo byla definována konstanta preprocesoru _CRTDBG_MAP_ALLOC
.
Vrácená hodnota
Po úspěšném dokončení vrátí tato funkce ukazatel na uživatelskou část posledního přiděleného bloku paměti, zavolá novou funkci obslužné rutiny nebo vrátí NULL
. Úplný popis chování vrácení najdete v části Poznámky. Další informace o tom, jak se používá nová funkce obslužné rutiny, najdete v této calloc
funkci.
Poznámky
_calloc_dbg
je ladicí verze calloc
funkce. Pokud _DEBUG
není definováno, každé volání _calloc_dbg
se sníží na volání calloc
. _calloc_dbg
V calloc
základní haldě se přidělují number
bloky paměti, ale _calloc_dbg
nabízí několik funkcí ladění:
Vyrovnávací paměti na obou stranách uživatelské části bloku pro testování úniků.
Parametr typu bloku ke sledování konkrétních typů přidělení.
filename
/linenumber
informace k určení původu žádostí o přidělení.
_calloc_dbg
přiděluje každý blok paměti s o něco více místa, než je požadované size
. Další místo používá správce haldy ladění k propojení bloků paměti ladění a k poskytnutí aplikace informace hlavičky ladění a přepsání vyrovnávací paměti. Při přidělení bloku se část bloku uživatele vyplní hodnotou 0xCD a každá vyrovnávací paměť přepsání se vyplní 0xFD.
_calloc_dbg
nastaví errno
, ENOMEM
pokud přidělení paměti selže; EINVAL
je vráceno v případě, že množství potřebné paměti (včetně výše uvedené režie) překročí _HEAP_MAXREQ
. Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
Informace o přidělování, inicializaci a správě bloků paměti ve verzi ladění základní haldy naleznete v podrobnostech haldy ladění CRT. Informace o rozdílech mezi voláním standardní funkce haldy a ladicí verzí naleznete v tématu Ladění verzí funkcí přidělení haldy.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_calloc_dbg |
<crtdbg.h> |
Další informace o kompatibilitě najdete v 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 );
}
Allocated memory successfully