Фунция HeapFree освобождает фрагмент памяти, который был ранее выделен из кучи при помощи одного из вызовов HeapAlloc или HeapReAlloc.
function HeapFree( hHeap: THandle; // дескриптор кучи dwFlags: DWORD; // опции освобождения памяти lpMem: Pointer // указатель на освобождамый блок ): BOOL; stdcall;
Параметры
hHeap [in]
Задает кучу, которая владеет освобождемым фрагментом памяти. Данный параметр
должен быть дескриптором, полученным при помощи функций
HeapCreate или
GetProcessHeap.
dwFlags [in]
Указывает несколько управляющих аспектов при освобождении указанного блока
памяти. Указание соответствующих значений переопределяет значения, которые
были указаны при создании кучи (вызов HeapCreate,
параметр flOptions).
| Флаг | Назначение |
|---|---|
HEAP_NO_SERIALIZE1) |
Указывает, что пока выполняется текущий вызов HeapFree, к куче не будут происходить обращения из других потоков. Важно! Это значение не может быть указано при обращении к куче процесса. Система может создавать свои собственные потоки без участия приложения, например такие, как обработчик нажатия Ctrl+C, которые могут выполнять доступ к куче процесса. |
lpMem [in]
Указатель на фрагмент памяти, который будет освобожден. Этот указатель должен
быть получен в результате вызова HeapAlloc или
HeapReAlloc.
Возвращаемое значение
В случае удачного звершения функция возвращает True.
В случае ошибки функция вернет False. Для получения расширенной информации об ошибке следует сделать вызов GetLastError.
Описание
Защита от повторной входимости гарантирует, что в том случае, когда к куче будет происходить одновременно обращение из двух или нескольких потоков (например, один будет выделять память, а другой будет ее освобождать), работа с кучей будет происходить корректно. Тем не менее защита от повторной входимости требует некоторых затрат ресурсов, поэтому вы должны использовать ее только в том случае, когда несколько потоков одновременно обращаются к куче. Задавая флаг HEAP_NO_SERIALIZE, вы можете отключить защиту от повторной входимости. Одновременное обращение к куче из двух или нескольких потоков, при отключенной защите от повторной входимости, может повлечь за собой разрушение кучи. Поэтому вы должны отключать защиту от посторной входимости только в одном из следующих случаев:
Вы не должны обращаться к памяти, которая была освобождена путем вызова HeapFree. При освобождении фрагмента памяти, вся информация, которая располагалась в нем, теряется. Если вы нуждаетесь в информации, которая хранится в фрагменте памяти, никогда не вызывайте для него метод HeapFree. Функции, которые используется для того, чтобы получить информацию о выделенном блоке (такие как HeapSize), также не могут быть использованы вместе с освобожденным блоком. В случае такого использования они вернут фиктивные данные.
Примечание: Для того, чтобы уберечь себя от ошибки нарушения доступа (access violation), вы должны защитить блоками структурной обработки исключений любой код, выполняющий операции чтения/записи в кучу. Для большей информации по этому вопросу смотрите раздел "Структурная обработка исключений".
Требования
Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
Windows 95/98: Требуется Windows 95 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Windows
Смотри также:
HeapDestroy |
HeapLock![]() |
© Mystic, 2002