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


_freea

Освобождает блок памяти.

Синтаксис

void _freea(
   void *memblock
);

Параметры

memblock
Ранее выделенный блок памяти, который требуется освободить.

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

Нет.

Замечания

Функция _freea освобождает блок памяти (memblock), который ранее был выделен вызовом _malloca. Функция _freea проверяет, была ли память выделена в стеке или в куче. Если она была выделена в стеке, функция _freea не выполняет никаких действий. Если память выделена в куче, число освобожденных байтов эквивалентно количеству байтов, запрошенному при выделении блока. Если memblock есть NULL, указатель игнорируется и _freea немедленно возвращается. Попытка освободить недопустимый указатель (указатель на блок памяти, который не был выделен _malloca) может повлиять на последующие запросы на выделение и вызвать ошибки.

_freea вызывает free внутренне, если он находит, что память выделена в куче. Информация о том, выделена ли память в куче или в стеке, определяется меткой, которая устанавливается в памяти по адресу, непосредственно предшествующему выделенному блоку памяти.

В случае возникновения ошибки при освобождении памяти для errno задаются сведения о характере сбоя, полученные от операционной системы. Дополнительные сведения см. в разделе errno, _doserrno, _sys_errlist, и _sys_nerr.

После освобождения блока памяти свести к минимуму объем свободной памяти в куче, _heapmin объединив неиспользуемые регионы и отпустив их обратно в операционную систему. Освобожденная память, которая не освобождается в операционной системе, восстанавливается в свободном пуле и снова доступна для выделения.

Вызов _freea должен сопровождать все вызовы _malloca. Это также ошибка для вызова _freea дважды в одной памяти. Если приложение связано с отладочной версией библиотек времени выполнения C, особенно с _malloc_dbg функциями, включенными путем определения _CRTDBG_MAP_ALLOC, проще найти отсутствующие или повторяющиеся вызовы _freea. Дополнительные сведения о том, как куча управляется во время отладки, см. в разделе "Отладочная куча CRT".

Функция _freea помечена как __declspec(noalias); это означает, что функция гарантировано не изменяет глобальные переменные. Дополнительные сведения см. в разделе noalias.

Требования

Function Обязательный заголовок
_freea <stdlib.h> и <malloc.h>

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

Пример

Пример см. в примере _malloca.

См. также

Распределение памяти
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin