_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
_recalloc
void
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ównumber
size
* .NULL
memblock
Każdy element jest inicjowany do 0. Jeśli memblock
nie NULL
jest , powinien to być wskaźnik zwrócony przez poprzednie wywołanie metody calloc
, malloc
lub 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_MAXREQ
wartość . Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno
, _doserrno
, _sys_errlist
i _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