Dela via


_calloc_dbg

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

Se även

Felsökningsrutiner
calloc
_malloc_dbg
_DEBUG