_expand_dbg
Zmienia rozmiar podany blok pamięci w stercie metodą rozwijania lub Umawiające się bloku (tylko wersja debugowania).
void *_expand_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int linenumber
);
Parametry
userData
Wskaźnik bloku wcześniej alokacji pamięci.newSize
Zgłoszony nowy rozmiar bloku (w bajtach).blockType
Zażądał typu po zmianie rozmiaru bloku: _CLIENT_BLOCK lub _NORMAL_BLOCK.filename
Rozwiń wskaźnik na nazwę pliku źródłowego, który zażądał operacji lub NULL.linenumber
Numer w pliku źródłowym, gdzie zażądano operacji rozwijania wiersza lub NULL.
filename i linenumber parametry są dostępne tylko po _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 pamięci po zmianie rozmiaru bloku.Ponieważ pamięci nie jest przenoszony, adres jest taka sama jak userData.Jeśli wystąpił błąd lub nie można rozpakować bloku do żądanego rozmiaru, zwraca NULL.Jeśli wystąpi awaria, errno jest z informacjami z systemu operacyjnego o charakter błędu.Aby uzyskać więcej informacji o errno, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.
Uwagi
_expand_dbg Funkcja jest w wersji debugowej-Rozwiń funkcji.Gdy _DEBUG nie jest zdefiniowana, każde wywołanie _expand_dbg jest ograniczona do wywołania _expand.Zarówno _expand i _expand_dbg zmienić rozmiar bloku pamięci w stercie podstawowej, ale _expand_dbg może pomieścić kilka funkcji debugowania: buforów po obu stronach użytkownika część bloku do testowania na przecieki, parametr typu bloku do śledzenia typy szczególny przydział i filename/linenumber informacji do ustalenia pochodzenia żądania alokacji.
_expand_dbgZmienia rozmiar bloku pamięci określony z nieco większej ilości miejsca niż żądanego newSize.newSizemoże być większa lub mniejsza niż rozmiar bloku pierwotnie alokacji pamięci.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.Rozmiar jest realizowane przez rozwijanie lub Umawiające się oryginalnego bloku pamięci._expand_dbgnie przenosi blok pamięci, podobnie jak _realloc_dbg funkcji.
Gdy newSize jest większa od oryginalnego bloku rozmiar bloku pamięci jest rozwinięty.Podczas ekspansji, jeśli blok pamięci nie może być rozszerzona, aby pomieścić żądanego rozmiaru NULL jest zwracany.Gdy newSize jest mniejszy niż blok oryginalny rozmiar bloku pamięci jest związana umową do uzyskania nowego rozmiaru.
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ć informacji na temat typów bloku alokacji i sposobu ich używania, zobacz typów bloków na stercie debugowania.Aby uzyskać informacje dotyczące różnic między wywołaniem funkcji standardowych sterty i jej wersję programu debug w kompilacja do debugowania aplikacji, zobacz Wersja debugowania funkcji alokacji stosu.
Ta funkcja sprawdza poprawność swoich parametrów.Jeśli memblock jest pusty wskaźnik, lub jeśli rozmiar jest większy niż _HEAP_MAXREQ, ta funkcja wywołuje program obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może być kontynuowane, errno jest ustawione jako EINVAL, a funkcja zwraca NULL.
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
_expand_dbg |
<crtdbg.h> |
Aby uzyskać więcej informacji na temat zgodności – zobacz: Zgodność.
Biblioteki
Debuguj wersje wyłącznie Bibliotek uruchomieniowych C.
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 Twojego komputera, 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ć standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.