Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Allokerar minnesblock i heapen med extra utrymme för ett felsökningshuvud och skriv över buffertar (endast felsökningsversion).
Syntax
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parametrar
number
Begärt antal minnesblock.
size
Begärd storlek för varje minnesblock (byte).
blockType
Begärd typ av minnesblock: _CLIENT_BLOCK
eller _NORMAL_BLOCK
.
Information om typer av allokeringsblock och hur de används finns i Typer av block på felsöknings-heapen.
filename
Pekare till namnet på källfilen som begärde allokeringsåtgärd eller NULL
.
linenumber
Radnummer i källfilen där allokeringsåtgärd begärdes eller NULL
.
Parametrarna filename
och linenumber
är endast tillgängliga när _calloc_dbg
har anropats explicit eller _CRTDBG_MAP_ALLOC
förprocessorkonstant har definierats.
Returvärde
När den här funktionen har slutförts returnerar den här funktionen en pekare till användardelen av det senast allokerade minnesblocket, anropar den nya hanteringsfunktionen eller returnerar NULL
. En fullständig beskrivning av returbeteendet finns i avsnittet Kommentarer. Mer information om hur den nya hanteringsfunktionen används finns i funktionen calloc
.
Anmärkningar
_calloc_dbg
är en felsökningsversion av funktionen calloc
. När _DEBUG
inte har definierats reduceras varje anrop till _calloc_dbg
till ett anrop till calloc
. Både calloc
och _calloc_dbg
allokera number
minnesblock i bashögen, men _calloc_dbg
erbjuder flera felsökningsfunktioner:
Buffertar på vardera sidan av användardelen av blocket för att testa läckage.
En blocktypsparameter för att spåra specifika allokeringstyper.
filename
/linenumber
information för att fastställa ursprunget för allokeringsbegäranden.
_calloc_dbg
allokerar varje minnesblock med något mer utrymme än den begärda size
. Det extra utrymmet används av felsökningshanteraren för heap för att länka minnesblocken för felsökning och för att ge programmet information om felsökningshuvud och skriva över buffertar. När blocket allokeras fylls användardelen av blocket med värdet 0xCD och var och en av överskrivningsbuffertarna fylls med 0xFD.
_calloc_dbg
anger errno
till ENOMEM
om en minnesallokering misslyckas. EINVAL
returneras om mängden minne som behövs (inklusive ovanstående omkostnader) överskrider _HEAP_MAXREQ
. Information om den här och andra felkoder finns i errno
, _doserrno
, _sys_errlist
och _sys_nerr
.
Information om hur minnesblock allokeras, initieras och hanteras i felsökningsversionen av bas-heapen finns i CRT-felsökningsinformation. Information om skillnaderna mellan att anropa en standard-heap-funktion och felsökningsversionen finns i Felsökningsversioner av heapallokeringsfunktioner.
Krav
Rutin | Obligatoriskt huvud |
---|---|
_calloc_dbg |
<crtdbg.h> |
Mer kompatibilitetsinformation finns i Compatibility.
Exempel
// 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