Sdílet prostřednictvím


_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_doserrnoerrno

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

Viz také

Rutiny ladění
calloc
_malloc_dbg
_DEBUG