odśmiecacz
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 i _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 łącza).
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.