_calloc_dbg
Przydziela liczba bloków pamięci w stercie, z dodatkowym miejscem na nagłówku 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
Zgłoszony rozmiar bloku pamięci (w bajtach).blockType
Zażądał typu blok pamięci: _CLIENT_BLOCK lub _NORMAL_BLOCK.Aby uzyskać informacji na temat typów bloku alokacji i sposobu ich używania, zobacztypów bloków na stercie debugowania.
filename
Wskaźnik do nazwę pliku źródłowego, który zażądał operacji alokacji lub NULL.linenumber
Numer wiersza na pliku źródłowego, gdzie zażądano operacji alokacji lub NULL.
filename i linenumber parametry są dostępne tylko po _calloc_dbg został wywołany jawnie lub _CRTDBG_MAP_ALLOC preprocesora stała została zdefiniowana.
Wartość zwracana
Po pomyślnym zakończeniu, ta funkcja zwraca wskaźnik do części użytkownika ostatni blok alokacji pamięci, wywołuje funkcję obsługi nowych lub zwraca NULL.Pełny opis zachowania zwrotu zobacz sekcję Spostrzeżenia.Aby uzyskać więcej informacji dotyczących korzystania z 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 ograniczona do wywołania calloc.Obie calloc i _calloc_dbg przydzielić num bloków pamięci w stosie podstawowej, ale _calloc_dbg oferuje kilka funkcji debugowania:
Bufory po obu stronach użytkownika część bloku do testowania szczelności.
Parametr typu bloku do śledzenia typy szczególny przydział.
filename/linenumber informacji do ustalenia pochodzenia żądania alokacji.
_calloc_dbgKażdy blok pamięci w nieco większej ilości miejsca niż żądana przydziela size.Dodatkowe miejsce jest używany przez menedżera sterty debugowania łączenie bloków pamięci debugowania, a także zapewnić informacje nagłówka debugowania aplikacji i zastąpić buforów.Przy nadawaniu bloku użytkownika część bloku wstawiana jest wartość 0x50 i każdego z buforów Zastąp są wypełnione 0xFD.
_calloc_dbgUstawia errno do ENOMEM niespełnieniu alokacji pamięci; EINVALjest zwracany, jeśli przekracza ilość pamięci potrzebnej (w tym narzut wymienionych wcześniej) _HEAP_MAXREQ.Aby uzyskać informacje o tym i innych kodach błędów, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.
Aby uzyskać informacje na temat sposobu, w jaki bloki pamięci są przydzielane, inicjowane i zarządzane w wersji debugowania podstawowej sterty, zobacz Szczegóły dotyczące stosu debugowania CRT.Aby uzyskać informacje dotyczące różnic między wywołanie funkcji standardowych sterty porównaniu jego wersji debug w kompilacja do debugowania aplikacji, zobacz Wersja debugowania funkcji alokacji stosu.
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
_calloc_dbg |
<crtdbg.h> |
Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność we Wstępie.
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ć standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.