Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Rutiny ladění

calloc

_malloc_dbg

_DEBUG