Delen via


_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_dbgnumber 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_errlisten _sys_nerrvoor 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

Zie ook

routines voor foutopsporing
calloc
_malloc_dbg
_DEBUG