Udostępnij za pośrednictwem


_recalloc

Kombinacja elementów realloc i calloc. Ponownie przydziela tablicę w pamięci i inicjuje jej elementy do 0.

Składnia

void *_recalloc(
   void *memblock
   size_t num,
   size_t size
);

Parametry

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

number
Liczba elementów.

size
Długość w bajtach każdego elementu.

Wartość zwracana

_recallocvoid Zwraca wskaźnik do przydzielonego (i prawdopodobnie przeniesionego) bloku pamięci.

Jeśli nie ma wystarczającej ilości dostępnej pamięci, aby rozwinąć blok do danego rozmiaru, oryginalny blok pozostanie niezmieniony i NULL zostanie zwrócony.

Jeśli żądany rozmiar ma wartość zero, blok wskazywany przez memblock element jest zwalniany; zwracana wartość to NULL, i memblock jest w lewo wskazująca na wolny blok.

Wartość zwracana wskazuje miejsce do magazynowania, które jest odpowiednio wyrównane do magazynu dowolnego typu obiektu. Aby uzyskać wskaźnik do typu innego niż void, użyj rzutowania typu na wartość zwracaną.

Uwagi

Funkcja _recalloc zmienia rozmiar przydzielonego bloku pamięci. Argument memblock wskazuje początek bloku pamięci. Jeśli parametr ma wartość , _recalloc zachowuje się tak samo jak calloc i przydziela nowy blok bajtównumbersize * .NULLmemblock Każdy element jest inicjowany do 0. Jeśli memblock nie NULLjest , powinien to być wskaźnik zwrócony przez poprzednie wywołanie metody calloc, malloclub realloc.

Ponieważ nowy blok może znajdować się w nowej lokalizacji pamięci, wskaźnik zwrócony przez _recalloc element nie ma gwarancji, że wskaźnik jest przekazywany przez memblock argument.

_recalloc ustawia wartość errno , ENOMEM jeśli alokacja pamięci nie powiedzie się lub jeśli żądana ilość pamięci przekracza _HEAP_MAXREQwartość . Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

recalloc wywołania realloc w celu ustawienia nowego trybu obsługi za pomocą funkcji języka C++ _set_new_mode . Nowy tryb obsługi wskazuje, realloc czy w przypadku niepowodzenia należy wywołać nową procedurę obsługi zgodnie z ustawieniem ._set_new_handler Domyślnie realloc nie wywołuje nowej procedury obsługi w przypadku niepowodzenia przydzielenia pamięci. To domyślne zachowanie można zastąpić, aby w przypadku _recalloc niepowodzenia przydzielenia pamięci realloc wywołać nową procedurę obsługi w taki sam sposób, jak new operator, gdy ulegnie awarii z tego samego powodu. Aby zastąpić wartość domyślną, wywołaj metodę

_set_new_mode(1);

na początku programu lub z linkiem z NEWMODE.OBJ.

Gdy aplikacja jest połączona z wersją debugowania bibliotek czasu wykonywania języka C, _recalloc jest rozpoznawana jako _recalloc_dbg. Aby uzyskać więcej informacji o sposobie zarządzania stertą podczas procesu debugowania, zobacz Sterta debugowania CRT.

_recalloc jest oznaczony __declspec(noalias) i __declspec(restrict), co oznacza, że funkcja nie ma gwarancji, aby nie modyfikować zmiennych globalnych i że zwrócony wskaźnik nie jest aliasowany. Aby uzyskać więcej informacji, zobacz tematy noalias oraz restrict.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
_recalloc <stdlib.h> i <malloc.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Zobacz też

Alokacja pamięci
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Opcje łącza