_calloc_dbg
Hiermee wijst u geheugenblokken toe in de heap met extra ruimte voor een header voor foutopsporing en overschrijven van buffers (alleen foutopsporingsversie).
Syntaxis
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parameters
number
Aangevraagd aantal geheugenblokken.
size
Aangevraagde grootte van elk geheugenblok (bytes).
blockType
Aangevraagd type geheugenblok: _CLIENT_BLOCK
of _NORMAL_BLOCK
.
Zie Typen blokken op de heap-voor informatie over de typen toewijzingsblokken en hoe ze worden gebruikt.
filename
Aanwijzer naar de naam van het bronbestand waarvoor toewijzingsbewerking is aangevraagd of NULL
.
linenumber
Regelnummer in het bronbestand waar de toewijzingsbewerking is aangevraagd of NULL
.
De parameters filename
en linenumber
zijn alleen beschikbaar wanneer _calloc_dbg
expliciet is aangeroepen of de _CRTDBG_MAP_ALLOC
preprocessorconstante is gedefinieerd.
Retourwaarde
Bij een geslaagde voltooiing retourneert deze functie een aanwijzer naar het gebruikersgedeelte van het laatst toegewezen geheugenblok, roept de nieuwe handler-functie aan of retourneert NULL
. Zie de sectie Opmerkingen voor een volledige beschrijving van het retourgedrag. Zie de calloc
functie voor meer informatie over hoe de nieuwe handlerfunctie wordt gebruikt.
Opmerkingen
_calloc_dbg
is een foutopsporingsversie van de calloc
-functie. Wanneer _DEBUG
niet is gedefinieerd, wordt elke aanroep naar _calloc_dbg
beperkt tot een aanroep naar calloc
. Zowel calloc
als _calloc_dbg
number
geheugenblokken toewijzen in de basis-heap, maar _calloc_dbg
biedt verschillende functies voor foutopsporing:
Buffers aan beide zijden van het gebruikersgedeelte van het blok om te testen op lekken.
Een bloktypeparameter voor het bijhouden van specifieke toewijzingstypen.
filename
/linenumber
informatie om de oorsprong van toewijzingsaanvragen te bepalen.
_calloc_dbg
wijst elk geheugenblok toe met iets meer ruimte dan de aangevraagde size
. De extra ruimte wordt gebruikt door de heap-manager voor foutopsporing om de foutopsporingsgeheugenblokken te koppelen en om de toepassing informatie over de foutopsporingsheader te bieden en buffers te overschrijven. Wanneer het blok wordt toegewezen, wordt het gebruikersgedeelte van het blok gevuld met de waarde 0xCD en worden alle overschrijfbuffers gevuld met 0xFD.
_calloc_dbg
stelt errno
in op ENOMEM
als een geheugentoewijzing mislukt; EINVAL
wordt geretourneerd als de benodigde hoeveelheid geheugen (inclusief de eerder genoemde overhead) groter is dan _HEAP_MAXREQ
. Zie errno
, _doserrno
, _sys_errlist
en _sys_nerr
voor meer informatie over deze en andere foutcodes.
Zie CRT-foutopsporingsdetailsvoor informatie over hoe geheugenblokken worden toegewezen, geïnitialiseerd en beheerd in de foutopsporingsversie van de basis-heap. Zie Foutopsporingsversies van heap-functiesvoor informatie over de verschillen tussen het aanroepen van een standaard heap-functie en de foutopsporingsversie.
Eisen
Routine | Vereiste header |
---|---|
_calloc_dbg |
<crtdbg.h> |
Zie Compatibiliteitsvoor meer compatibiliteitsinformatie.
Voorbeeld
// 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