_calloc_dbg
Przydziela liczba bloków pamięci w stercie, z dodatkowym miejscem na nagłówek debugowania i zastąpić buforów (tylko wersja debugowania).
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
Parametry
num
Żądana liczba bloków pamięci.size
Żądana rozmiar każdego bloku pamięci (w bajtach).blockType
Żądanie typu blok pamięci: _CLIENT_BLOCK lub _NORMAL_BLOCK.Informacje o alokacji typów bloku i w jaki sposób są używane, zobacz Typów bloków na stercie debugowania.
filename
Wskaźnik do nazwy pliku źródłowego, który zażądał operacji alokacji lub NULL.linenumber
Numer w pliku źródłowym, jeżeli zażądano operacji alokacji lub NULL.
filename i linenumber parametry są dostępne tylko podczas _calloc_dbg został wywołany jawnie lub _CRTDBG_MAP_ALLOC preprocesora stała została zdefiniowana.
Wartość zwracana
Po pomyślnym zakończeniu, funkcja ta zwraca wskaźnik do części użytkownika ostatniego bloku pamięci przydzielone, wywołuje funkcję obsługi nowych lub zwraca NULL.Pełny opis zachowanie zwrotu zobacz sekcję Spostrzeżenia.Aby uzyskać więcej informacji o sposobie używania nowych funkcji obsługi, zobacz calloc funkcji.
Uwagi
_calloc_dbgjest w wersji debugowej z calloc funkcji.Gdy _DEBUG nie jest zdefiniowana, każde wywołanie _calloc_dbg jest zredukowana do wywołania calloc.Obie calloc i _calloc_dbg przydzielić num pamięci bloki na stercie podstawowej, ale _calloc_dbg oferuje kilka funkcji debugowania:
Bufory po obu stronach część użytkownikowi bloku do badania pod kątem przecieków.
Parametr typu blok do śledzenia alokacji określonych typów.
filename/linenumber informacji do ustalenia pochodzenia żądania alokacji.
_calloc_dbgprzydziela każdego bloku pamięci, z nieco więcej miejsca niż żądana size.Dodatkowe miejsce jest używany przez menedżera sterty debugowania połączyć bloków pamięci debugowania oraz do zapewnienia stosowania z informacjami nagłówka debugowania i zastąpić buforów.Gdy blok jest przydzielone, część użytkownikowi bloku jest wprowadzana wartość 0x50 i każdego z buforów Zastąp wypełniane są 0xFD.
_calloc_dbgUstawia errno do ENOMEM Jeśli alokacja pamięci nie powiedzie się; EINVALjest zwracany, jeśli ilość pamięci potrzebnej (w tym napowietrznej wymienionych wcześniej) przekracza _HEAP_MAXREQ.Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno, _doserrno, _sys_errlist i _sys_nerr.
Informacje o jak bloków pamięci są przydzielane, zainicjowany i zarządzane w wersji debugowej bazowy sterty, zobacz Zarządzanie pamięcią i debugowania sterty.Aby uzyskać informacje dotyczące różnic pomiędzy wywołaniem funkcji standardowego sterty i jego wersji debugowania w trybie debugowania aplikacji, zobacz przy użyciu wersji kontra Base wersja do debugowania.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
_calloc_dbg |
<crtdbg.h> |
Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.
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 );
}
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.