Udostępnij za pośrednictwem


_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.

Zobacz też

Informacje

Debugowania procedur

calloc

_malloc_dbg

_DEBUG