_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 size
element . 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_MAXREQ
wartość . Aby uzyskać informacje o tym i innych kodach błędów, zobacz errno
, _doserrno
, _sys_errlist
i _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