Поделиться через


_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
Параметры ссылок