_recalloc
Комбинация realloc
и calloc
. Перераспределяет массив в памяти и инициализирует его элементы значением 0.
Синтаксис
void *_recalloc(
void *memblock
size_t num,
size_t size
);
Параметры
memblock
Указатель на ранее выделенный блок памяти.
number
Число элементов.
size
Длина каждого элемента в байтах.
Возвращаемое значение
_recalloc
возвращает указатель void
в перераспределенном (и, возможно, перемещенном) блоке памяти.
Если недостаточно доступной памяти для расширения блока до заданного размера, исходный блок остается неизменным и NULL
возвращается.
Если запрошенный размер равен нулю, то блок, на который указывает memblock
, освобождается; возвращается значение NULL
, memblock
по-прежнему указывает на освобожденный блок.
Возвращаемое значение указывает на место хранения, подходящее для хранения любого типа объекта. Чтобы получить указатель на тип, отличный от void
, используйте приведение типов для возвращаемого значения.
Замечания
Функция _recalloc
изменяет размер выделенного блока памяти. Аргумент memblock
указывает на начало блока памяти. Если параметр memblock
имеет значение NULL
, функция _recalloc
ведет себя так же, как и функция calloc
, выделяя новый блок размером number
* size
байтов. Каждый элемент инициализируется значением 0. Если memblock
это не NULL
так, он должен быть указателем, возвращаемым предыдущим вызовом calloc
, malloc
или realloc
.
Так как новый блок может находиться в новом расположении памяти, указатель, возвращенный _recalloc
не гарантируется, что указатель передается через memblock
аргумент.
Функция _recalloc
задает для параметра errno
значение ENOMEM
, если выделение памяти завершается сбоем или количество запрошенной памяти превышает _HEAP_MAXREQ
. Сведения об этом и других кодах ошибок см. в разделе errno
, _doserrno
_sys_errlist
и _sys_nerr
.
recalloc
вызовы realloc
для использования функции C++ _set_new_mode
для задания нового режима обработчика. Новый режим обработки указывает, должна ли функция realloc
при сбое вызывать новую подпрограмму обработчика, заданную функцией _set_new_handler
. По умолчанию realloc
не вызывает новую подпрограмму обработчика при сбое выделения памяти. Можно переопределить это поведение по умолчанию, чтобы в случае сбоя предоставления памяти функцией _recalloc
функция realloc
вызывала новую подпрограмму обработчика таким же образом, как это делает оператор new
при сбое по той же причине. Чтобы переопределить значение по умолчанию, вызовите
_set_new_mode(1);
на ранних этапах программы или компонуйте с использованием NEWMODE.OBJ.
Если приложение связано с отладочной версией библиотек времени выполнения C, _recalloc
разрешается в _recalloc_dbg
. Дополнительные сведения о том, как куча управляется во время отладки, см. в разделе "Отладочная куча CRT".
_recalloc
помечается __declspec(noalias)
и __declspec(restrict)
означает, что функция гарантированно не изменяет глобальные переменные, а возвращаемый указатель не является псевдонимом. Дополнительные сведения см. в разделах noalias
и restrict
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
_recalloc |
<stdlib.h> и <malloc.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
См. также
Распределение памяти
_recalloc_dbg
_aligned_recalloc
_aligned_offset_recalloc
free
Параметры ссылок