Udostępnij za pośrednictwem


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

Zobacz też

Informacje

Alokacja pamięci

calloc

free

malloc

_msize

realloc