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