Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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/linenumbera 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