realloc

Alokacja bloków pamięci.

void *realloc(
   void *memblock,
   size_t size 
);

Parametry

  • memblock
    Wskaźnik do wcześniej zaalokowanego bloku pamięci.

  • size
    Nowy rozmiar w bajtach.

Wartość zwracana

reallocZwraca void wskaźnik do bloku pamięci reallocated (i ewentualnie przeniesiony).

Jeśli jest za mało dostępnej pamięci, aby rozwinąć bloku do podanego rozmiaru, oryginalnego bloku pozostanie niezmieniona, i NULL jest zwracany.

Jeśli size jest zero, a następnie blok wskazywanej przez memblock jest zwolniona; zwracana jest wartość NULL, i memblock jest po lewej, wskazującego blok zwalniane.

Zwracana wartość wskazuje miejsce w magazynie jest gwarantowane zostały odpowiednio dostosowane do przechowywania dowolnego typu obiektu.Aby uzyskać wskaźnika typu innego niż void, użyj typu oddanych na wartości zwracanej.

Uwagi

realloc Funkcji zmienia rozmiar bloku alokacji pamięci.memblock Argument wskazuje początek bloku pamięci.Jeśli memblock jest NULL, realloc zachowuje się w taki sam sposób jak malloc i przydziela nowy blok size bajtów.Jeśli memblock nie jest NULL, powinno się wskaźnik, zwrócony przez poprzednie wywołanie calloc, malloc, lub realloc.

size Argument daje nowy rozmiar bloku w bajtach.Zawartość bloku nie ulegną zmianie na krótsze rozmiarów nowych i starych, chociaż nowego bloku mogą znajdować się w innej lokalizacji.Ponieważ nowy blok może być w nowej lokalizacji w pamięci, wskaźnik zwracany przez realloc nie jest gwarantowane jest wskaźnik przekazany przez memblock argument.reallocnie nie zero nowo przydzielone pamięci w przypadku wzrostu buforu.

reallocUstawia errno do ENOMEM Jeśli alokacja pamięci nie powiedzie się lub jeśli żądana ilość pamięci, przekracza _HEAP_MAXREQ.Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.

reallocwywołania mallocdo użyć C++ _set_new_mode funkcji, aby ustawić nowy tryb obsługi.Nowy tryb obsługi wskazuje, czy w przypadku awarii, malloc jest wywołanie procedury obsługi nowych określone przez _set_new_handler.Domyślnie malloc nie wywołuje nowe procedury obsługi na nie można przydzielić pamięci.Można zastąpić to zachowanie domyślne tak, aby, gdy realloc nie można przydzielić pamięci, malloc wywołuje nowe procedury obsługi w taki sam sposób new operator wykonuje, gdy go nie powiedzie się z tego samego powodu.Aby zastąpić ustawienia domyślne, zadzwoń

_set_new_mode(1)

wczesne w takich, które program lub połączenie z NEWMODE.OBJ (see Opcje łącz).

Gdy aplikacja jest połączony z debugowania wersją biblioteki uruchomieniowej C, realloc jest rozpoznawany jako _realloc_dbg.Aby uzyskać więcej informacji na temat jak sterty jest zarządzany w trakcie debugowania, zobacz The CRT debugowania sterty.

reallocjest oznaczony jako __declspec(noalias) i __declspec(restrict), co oznacza, że funkcja zagwarantowane jest nie do modyfikacji zmiennych globalnych, i że zwrócony wskaźnik nie jest aliasu.Aby uzyskać więcej informacji, zobacz noalias i ograniczyć.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

realloc

<stdlib.h> i <malloc.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Przykład

// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
 

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

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

   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
      exit( 1 );

   size = _msize( buffer );
   printf_s( "Size of block after malloc of 1000 longs: %u\n", size );

   // Reallocate and show new size:
   oldbuffer = buffer;     // save pointer in case realloc fails
   if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) )) 
        ==  NULL )
   {
      free( oldbuffer );  // free original block
      exit( 1 );
   }
   size = _msize( buffer );
   printf_s( "Size of block after realloc of 1000 more longs: %u\n", 
            size );

   free( buffer );
   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