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


_recalloc_dbg

Повторно выделяет массив и инициализирует его элементы нулями (только отладочная версия).

void *_recalloc_dbg(     void *userData,    size_t num,    size_t size,    int blockType,    const char *filename,    int linenumber  );

Параметры

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

  • num
    Запрошенное число блоков памяти.

  • size
    Запрошенный размер каждого блока памяти (байт).

  • blockType
    Запрошенный тип блока памяти: _CLIENT_BLOCK или _NORMAL_BLOCK.

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

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

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

Параметры filename и linenumber доступны, только если функция _recalloc_dbg была явно вызвана или была определена константа препроцессора _CRTDBG_MAP_ALLOC.

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

При успешном выполнении эта функция возвращает указатель на пользовательскую часть перераспределенного блока памяти, вызывает новую функцию обработчика или возвращает значение NULL. Полное описание поведения возвращения см. в следующем разделе "Примечания". Дополнительные сведения о том, как используется новая функция обработчика, см. в описании функции _recalloc.

Заметки

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

_recalloc_dbg перераспределяет указанный блок памяти, добавив немного больше пространства, чем запрошено (num * size), что может быть больше или меньше размера первоначально выделенного блока памяти. Дополнительное пространство используется диспетчером кучи отладки, чтобы связать блоки памяти отладки и предоставить приложению сведения о заголовке отладки и буферы перезаписи. Перераспределение может привести к перемещению исходного блока памяти в другое расположение в куче, а также к изменению размера блока памяти. Пользовательская часть блока заполняется значением 0xCD, а все буферы перезаписи — значением 0xFD.

_recalloc_dbg задает для errno значение ENOMEM в случае сбоя выделения памяти; значение EINVAL возвращается, если необходимый объем памяти (включая ранее упомянутую нагрузку) превышает _HEAP_MAXREQ. Сведения об этих и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr.

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

Требования

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

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

_recalloc_dbg

<crtdbg.h>

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

Библиотеки

Только отладочные версии библиотек времени выполнения языка C.

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

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

См. также

Ссылки

Процедуры отладки