_expand
Zmienia rozmiar bloku pamięci.
void *_expand(
void *memblock,
size_t size
);
Parametry
memblock
Wskaźnik do wcześniej zaalokowanego bloku pamięci.size
Nowy rozmiar w bajtach.
Wartość zwracana
_expandZwraca void wskaźnik do bloku pamięci reallocated._expand, w odróżnieniu od realloc, nie można przenieść, zmienić jego rozmiar bloku.Zatem, jeśli istnieje wystarczająca ilość pamięci rozwinąć bloku bez przenoszenia go, memblock parametr _expand jest taka sama jak wartość zwracana.
_expandZwraca NULL podczas wykrycia błędu podczas jego działania.Na przykład jeśli _expand jest używany, aby zmniejszyć blok pamięci, to może wykryć uszkodzenie sterty niewielki blok lub wskaźnika nieprawidłowy blok i powrócić NULL.
Jeśli jest za mało pamięci rozwinąć bloku do podanego rozmiaru bez przenoszenia go, funkcja zwraca NULL._expandnigdy nie zwraca bloku rozszerzony do wielkości mniejszej niż żądana.Jeśli wystąpi awaria, errno wskazuje charakter awarii.Aby uzyskać więcej informacji o errno, zobacz errno, _doserrno, _sys_errlist i _sys_nerr.
Zwracana wartość wskazuje miejsce w magazynie jest gwarantowane zostały odpowiednio dostosowane do przechowywania dowolnego typu obiektu.Aby sprawdzić nowy rozmiar elementu, należy użyć _msize.Aby uzyskać wskaźnika typu innego niż void, użyj typu oddanych na wartości zwracanej.
Uwagi
_expand Funkcji zmienia rozmiar bloku pamięci uprzednio przydzielonego przez próby rozwinąć lub zwinąć bloku bez przesuwania jej położenie na stercie.memblock Parametru wskazuje początek bloku.size Parametr daje nowy rozmiar bloku w bajtach.Zawartość bloku nie ulegną zmianie na krótsze rozmiarów nowych i starych.memblocknie powinny być bloku, który został zwolniony.
[!UWAGA]
Na platformach 64-bitowe _expand nie może być umowy bloku, jeśli nowy rozmiar jest mniejszy niż bieżący rozmiar; w szczególności, jeśli blok był mniej niż 16 KB i dlatego są przydzielane w niskiej fragmentacji sterty _expand opuszcza blok bez zmian i zwraca memblock.
Gdy aplikacja jest połączony z debugowania wersją biblioteki uruchomieniowej C, _expand jest rozpoznawany jako _expand_dbg.Aby uzyskać więcej informacji na temat jak sterty jest zarządzany w trakcie debugowania, zobacz The CRT debugowania sterty.
Funkcja ta sprawdza poprawność jego parametry.Jeśli memblock jest wskaźnik null, 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.Jeśli size jest większa niż _HEAP_MAXREQ, errno jest ustawiona na ENOMEM i funkcja zwraca NULL.
Wymagania
Funkcja |
Wymaganego nagłówka |
---|---|
_expand |
<malloc.h> |
Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.
Przykład
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
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.