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


_aligned_offset_recalloc_dbg

Изменяет размер блока памяти, который был выделен с помощью _aligned_malloc или _aligned_offset_malloc, и инициализирует память нулями (только отладочная версия).

void * _aligned_offset_recalloc_dbg(    void *memblock,     size_t num,     size_t size,     size_t alignment,    size_t offset,    const char *filename,    int linenumber );

Параметры

  • [входной] memblock
    Указатель текущего блока памяти.

  • [входной] num
    Число элементов.

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

  • [входной] alignment
    Значение выравнивания, которое должно быть целой степенью числа 2.

  • [входной] offset
    Смещение в выделение памяти для принудительного выполнения выравнивания.

  • [входной] filename
    Указатель на имя исходного файла, который запросил операцию realloc, или NULL.

  • [входной] linenumber
    Номер строки в исходном файле, в которой была запрошена операция realloc, или NULL.

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

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

Заметки

_aligned_offset_realloc_dbg — это отладочная версия функции _aligned_offset_recalloc. Если _DEBUG не определен, каждый вызов функции _aligned_offset_recalloc_dbg сокращается до вызова функции _aligned_offset_recalloc. И _aligned_offset_recalloc, и _aligned_offset_recalloc_dbg выполняют перераспределение блока памяти в основной куче, однако _aligned_offset_recalloc_dbg включает различные функции отладки: буферы на обеих сторонах пользовательской части блока для тестирования утечек, параметр типа блока для отслеживания конкретных типов выделения, а также сведения о filename/linenumber для определения источника запросов на выделение.

_aligned_offset_realloc_dbg повторно выделяет указанный блок памяти, добавив немного больше пространства, чем запрошено newSize. newSize может быть больше или меньше размера первоначально выделенного блока памяти. Дополнительное пространство используется диспетчером кучи отладки, чтобы связать блоки памяти отладки и предоставить приложению сведения о заголовке отладки и буферы перезаписи. Перераспределение может привести к перемещению исходного блока памяти в другое расположение в куче, а также к изменению размера блока памяти. Если блок памяти перемещен, содержимое исходного блока перезаписывается.

Эта функция задает для errno значение ENOMEM в случае сбоя выделения памяти, а также если запрошенный размер (num * size) был больше _HEAP_MAXREQ. Дополнительные сведения о errno см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr. Кроме того, _aligned_offset_recalloc_dbg проверяет свои параметры. Если значение alignment не является степенью числа 2 или offset больше или равно запрошенному размеру и не равно нулю, эта функция вызывает обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эта функция возвращает NULL и задает для errno значение EINVAL.

Сведения о выделении, инициализации и управлении блоками памяти в отладочной версии основной кучи см. в разделе Сведения о куче отладки CRT. Сведения о типах блоков выделения и о том, как они используются, см. в разделе Типы блоков в отладочной куче. Сведения о различиях между вызовом стандартной функции кучи и ее отладочной версии в сборке отладки приложения см. в разделе Версии отладки функций выделения кучи.

Требования

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

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

_aligned_offset_recalloc_dbg

<malloc.h>

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

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

См. также

Ссылки

Выравнивание данных