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


_recalloc

Комбинация realloc и calloc. Перераспределяет массив в памяти и инициализирует его элементы значением 0.

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

Параметры

  • memblock
    Указатель на ранее выделенный блок памяти.

  • num
    Количество элементов.

  • size
    Длина в байтах каждого элемента.

Возвращаемое значение

_recalloc возвращает указатель void в перераспределенном (и, возможно, перемещенном) блоке памяти.

Если доступной памяти недостаточно, чтобы расширить блок до заданного размера, исходный блок останется без изменений и будет возвращен NULL.

Если запрошенный размер равен нулю, то блок, на который указывает memblock, освобождается; возвращается значение NULL, memblock дальше указывает на освобожденный блок.

Возвращаемое значение указывает на дисковое пространство, которое гарантированно выравнено подходящим для хранения любого типа объекта образом. Чтобы получить указатель на тип, отличный от void, используйте приведение типа для возвращаемого значения.

Заметки

Функция _recalloc изменяет размер выделенного блока памяти. Аргумент memblock указывает на начало блока памяти. Если memblock равен NULL, _recalloc ведет себя так же, как calloc, и выделяет новый блок размером num * size байтов. Каждый элемент инициализируется значением 0. Если memblock не NULL, он должен быть указателем, возвращенным предыдущим вызовом calloc, malloc или realloc.

Поскольку новый блок может находиться в новом расположении памяти, указатель, возвращенный _recalloc, не обязательно будет указателем, переданным через аргумент memblock.

_recalloc задает для параметра errno значение ENOMEM, если выделение памяти завершается сбоем или количество запрошенной памяти превышает _HEAP_MAXREQ. Сведения об этих и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlist, and _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.

Требования

Подпрограмма

Обязательный заголовок

_recalloc

<stdlib.h> и <malloc.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Выделение памяти

_recalloc_dbg

_aligned_recalloc

_aligned_offset_recalloc

свободные

Основные понятия

Параметры ссылок