Megosztás a következőn keresztül:


_calloc_dbg

Lefoglalja a halom memóriablokkjait, és további helyet foglal a hibakeresési fejléchez és felülírja a puffereket (csak hibakeresési verzió esetén).

Szintaxis

void *_calloc_dbg(
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber
);

Paraméterek

number
Kért memóriablokkok száma.

size
Az egyes memóriablokkok (bájtok) kért mérete.

blockType
Kért memóriablokk típusa: _CLIENT_BLOCK vagy _NORMAL_BLOCK.

A foglalási blokktípusokról és azok használatáról további információt A hibakeresési halomblokktípusai című témakörben talál.

filename
Mutasson annak a forrásfájlnak a nevére, amely kiosztási műveletet vagy NULLkért.

linenumber
Sorszám abban a forrásfájlban, amelyben foglalási műveletet kértek, vagy NULL.

A filename és linenumber paraméterek csak akkor érhetők el, ha _calloc_dbg explicit meghívást kapott, vagy a _CRTDBG_MAP_ALLOC előprocesszor-konstans definiálva lett.

Visszaadott érték

Sikeres befejezés esetén ez a függvény az utolsó lefoglalt memóriablokk felhasználói részére mutató mutatót ad vissza, meghívja az új kezelőfüggvényt, vagy visszaadja NULL. A visszatérési viselkedés teljes leírását a Megjegyzések szakaszban találja. Az új kezelőfüggvény használatáról további információt a calloc függvényben talál.

Megjegyzések

_calloc_dbg a calloc függvény hibakeresési verziója. Ha nincs definiálva _DEBUG, a _calloc_dbg hívásai callochívásra lesznek csökkentve. Mind calloc, mind _calloc_dbgnumber memóriablokkokat foglal le az alap halomban, de _calloc_dbg számos hibakeresési funkciót kínál:

  • Pufferek a blokk felhasználói részének mindkét oldalán a szivárgások teszteléséhez.

  • Blokktípus-paraméter adott foglalástípusok nyomon követéséhez.

  • filename / linenumber a kiosztási kérelmek eredetének meghatározására vonatkozó információkat.

_calloc_dbg az egyes memóriablokkokat a kért sizevalamivel több területtel foglalja le. A hibakeresési halomkezelő további helyet használ a hibakeresési memóriablokkok összekapcsolásához, valamint az alkalmazás hibakeresési fejlécadatainak és pufferek felülírásához. A blokk lefoglalásakor a blokk felhasználói része meg van töltve a 0xCD értékkel, és az összes felülírt puffer 0xFD lesz kitöltve.

_calloc_dbg errno ENOMEM állítja be, ha egy memóriafoglalás meghiúsul; EINVAL akkor ad vissza, ha a szükséges memória mennyisége (beleértve a korábban említett többletterhelést is) meghaladja a _HEAP_MAXREQ. Erről és más hibakódokról további információt a errno, _doserrno, _sys_errlistés _sys_nerrcímű témakörben talál.

A memóriablokkok az alap halom hibakeresési verziójában való lefoglalásával, inicializálásával és kezelésével kapcsolatos információkért lásd CRT hibakeresési halom részleteit. A standard halomfüggvények meghívása és a hibakeresési verzió közötti különbségekről a Halomfoglalási függvények hibakeresési verzióicímű témakörben olvashat.

Követelmények

Rutin Kötelező fejléc
_calloc_dbg <crtdbg.h>

További kompatibilitási információkért lásd kompatibilitási.

Példa

// 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

Lásd még:

hibakeresési rutinok
calloc
_malloc_dbg
_DEBUG