Udostępnij za pośrednictwem


_calloc_dbg

Przydziela bloki pamięci w stercie z dodatkowym miejscem na nagłówek debugowania i zastępowanie (tylko wersja debugowania).

Składnia

void *_calloc_dbg(
   size_t num,
   size_t size,
   int blockType,
   const char *filename,
   int linenumber
);

Parametry

number
Żądana liczba bloków pamięci.

size
Żądany rozmiar każdego bloku pamięci (bajtów).

blockType
Żądany typ bloku pamięci: _CLIENT_BLOCK lub _NORMAL_BLOCK.

Aby uzyskać informacje o typach bloków alokacji i sposobie ich użycia, zobacz Typy bloków na stercie debugowania.

filename
Wskaźnik na nazwę pliku źródłowego, który zażądał operacji alokacji lub NULL.

linenumber
Numer wiersza w pliku źródłowym, w którym zażądano operacji alokacji lub NULL.

Parametry filename i linenumber są dostępne tylko wtedy, gdy _calloc_dbg została wywołana jawnie lub zdefiniowano stałą _CRTDBG_MAP_ALLOC preprocesora.

Wartość zwracana

Po pomyślnym zakończeniu ta funkcja zwraca wskaźnik do części użytkownika ostatniego przydzielonego bloku pamięci, wywołuje nową funkcję obsługi lub zwraca wartość NULL. Pełny opis zachowania zwracanego można znaleźć w sekcji Uwagi. Aby uzyskać więcej informacji na temat sposobu użycia nowej funkcji obsługi, zobacz calloc funkcję .

Uwagi

_calloc_dbg jest wersją calloc debugowania funkcji. Jeśli _DEBUG nie jest zdefiniowane, każde wywołanie metody _calloc_dbg jest zmniejszane do wywołania metody calloc. Bloki pamięci i calloc _calloc_dbg przydzielane number w stercie podstawowym, ale _calloc_dbg oferuje kilka funkcji debugowania:

  • po obu stronach bloku, aby przetestować przecieki.

  • Parametr typu bloku do śledzenia określonych typów alokacji.

  • filename/linenumber informacje określające źródło żądań alokacji.

_calloc_dbg przydziela każdy blok pamięci z nieco większą ilością miejsca niż żądany sizeelement . Dodatkowe miejsce jest używane przez menedżera sterty debugowania, aby połączyć bloki pamięci debugowania i udostępnić aplikacji informacje nagłówka debugowania i zastąpić. Po przydzieleniu bloku część użytkownika bloku jest wypełniona wartością 0xCD, a każdy z zastępowania jest wypełniony 0xFD.

_calloc_dbg ustawia wartość errno na ENOMEM wartość , jeśli alokacja pamięci nie powiedzie się; EINVAL jest zwracana, jeśli wymagana ilość pamięci (w tym narzut wymieniony wcześniej) przekracza _HEAP_MAXREQwartość . Aby uzyskać informacje o tym i innych kodach błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Aby uzyskać informacje na temat przydzielania, inicjowania i zarządzania blokami pamięci w wersji debugowania sterty podstawowej, zobacz szczegóły sterty debugowania CRT. Aby uzyskać informacje o różnicach między wywoływaniem standardowej funkcji sterty i wersji debugowania, zobacz Debugowanie wersji funkcji alokacji sterty.

Wymagania

Procedura Wymagany nagłówek
_calloc_dbg <crtdbg.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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

Zobacz też

Procedury debugowania
calloc
_malloc_dbg
_DEBUG