Udostępnij za pośrednictwem


_expand_dbg

Zmienia rozmiar podany blok pamięci w stercie, zwiększając się lub Umawiających się bloku (tylko wersja debugowania).

void *_expand_dbg( 
   void *userData,
   size_t newSize,
   int blockType,
   const char *filename,
   int linenumber 
);

Parametry

  • userData
    Wskaźnik do bloku pamięci poprzednio przydzielona.

  • newSize
    Żądana nowy rozmiar bloku (w bajtach).

  • blockType
    Żądanie typu po zmianie rozmiaru bloku: _CLIENT_BLOCK lub _NORMAL_BLOCK.

  • filename
    Wskaźnik do nazwy pliku źródłowego, który zażądał rozwiń operacji lub NULL.

  • linenumber
    Numer w pliku źródłowym, jeżeli zażądano operacji rozwijania lub NULL.

filename i linenumber parametry są dostępne tylko podczas _expand_dbg został wywołany jawnie lub _CRTDBG_MAP_ALLOC preprocesora stała została zdefiniowana.

Wartość zwracana

Po pomyślnym zakończeniu _expand_dbg zwraca wskaźnik do bloku pamięci po zmianie rozmiaru.Ponieważ pamięci nie jest przenoszona, adres jest taka sama, jak userData.Jeśli wystąpił błąd lub nie można rozpakować bloku w żądanym rozmiarze, zwraca NULL.Jeśli wystąpi awaria, errno jest z informacji z systemu operacyjnego o charakterze awarii.Aby uzyskać więcej informacji o errno, zobacz errno, _doserrno, _sys_errlist i _sys_nerr.

Uwagi

_expand_dbg Funkcja jest w wersji debugowej-Rozwiń funkcji.Gdy _DEBUG nie jest zdefiniowana, każde wywołanie _expand_dbg jest zredukowana do wywołania _expand.Zarówno _expand i _expand_dbg zmiany rozmiaru bloku pamięci w stercie bazowy, ale _expand_dbg użytą kilka funkcji debugowania: buforów po obu stronach użytkownika część bloku do badania pod kątem przecieków, parametr typu blok do śledzenia typów określonych alokacji i filename/linenumber informacji do ustalenia pochodzenia żądania alokacji.

_expand_dbgZmienia rozmiar bloku pamięci określony nieco większej ilości miejsca niż żądana newSize.newSizemoże być większa lub mniejsza niż rozmiar bloku pamięci pierwotnie przyznane.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.Zmiana rozmiaru jest realizowane przez rozwijanie albo Umawiających się oryginalnego bloku pamięci._expand_dbgnie przenosi blok pamięci, podobnie jak _realloc_dbg funkcji.

Gdy newSize jest większa niż rozmiar bloku pamięci oryginalnego bloku jest rozwinięty.Podczas rozbudowy, jeśli blok pamięci nie mogą być rozwijane, aby pomieścić żądany rozmiar NULL jest zwracany.Gdy newSize jest mniejsza niż oryginalnego bloku jest zakontraktowane rozmiar bloku pamięci, aż do uzyskania nowego rozmiaru.

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.Informacje o alokacji typów bloku i w jaki sposób są używane, zobacz Typów bloków na stercie debugowania.Aby uzyskać informacje dotyczące różnic między wywołaniem funkcji standardowego sterty i jej wersję debugowania w trybie debugowania aplikacji, zobacz przy użyciu wersji Versus the Base wersja do debugowania.

Funkcja ta sprawdza poprawność jego parametry.Jeśli memblock jest wskaźnik null, lub jeśli rozmiar jest większy niż _HEAP_MAXREQ, funkcja ta wywołuje funkcję obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie jest dozwolone, aby kontynuować, errno jest ustawiona na EINVAL i funkcja zwraca NULL.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_expand_dbg

<crtdbg.h>

Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.

Biblioteki

Debug wersje biblioteki uruchomieniowej c tylko.

Przykład

// crt_expand_dbg.c
//
// This program allocates a block of memory using _malloc_dbg
// and then calls _msize_dbg to display the size of that block.
// Next, it uses _expand_dbg to expand the amount of
// memory used by the buffer and then calls _msize_dbg again to
// display the new amount of memory allocated to the buffer.
//

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>

int main( void )
{
   long *buffer;
   size_t size;

   // Call _malloc_dbg to include the filename and line number
   // of our allocation request in the header
   buffer = (long *)_malloc_dbg( 40 * sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );
   if( buffer == NULL )
      exit( 1 );

   // Get the size of the buffer by calling _msize_dbg
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );

   // Expand the buffer using _expand_dbg and show the new size
   buffer = (long *)_expand_dbg( buffer, size + sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );

   if( buffer == NULL )
      exit( 1 );
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _expand_dbg of 1 more long: %u\n",
           size );

   free( buffer );
   exit( 0 );
}
  

Komentarz

Dane wyjściowe tego programu zależy od możliwości na komputerze użytkownika, aby rozwinąć wszystkie sekcje.Jeśli wszystkie sekcje są rozwinięte, dane wyjściowe znajduje odzwierciedlenie w sekcji Wyjście.

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

_malloc_dbg