Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 V _calloc_dbg 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/linenumberinformace 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 errno_doserrno . _sys_errlist_sys_nerr
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