HeapAlloc и HeapFree

Создав кучу, есть возможность выделить в ней память.

LPVOID HeapAlloc
(
HANDLE hHeap,// указатель на кучу где можно выделить память
DWORD dwFlags,// флаги
SIZE_T dwBytes// обьем выделяемой памяти
);

Флаги могут быть следующие:

  • HEAP_GENERATE_ EXCEPTIONS - при ошибке будет исключение вместо NULL
  • HEAP_NO_SERIALIZE - доступ доложен быть не синхронизированный
  • HEAP_ZERO_MEMORY - установить содержимое выделяемой памяти в 0

При успешном выполнении возвращается указатель на память, а при ошибке либо NULL, либо исключение.

Для освобождения памяти используется функция HeapFree:

BOOL HeapFree
(
HANDLE hHeap,// указатель на кучу
DWORD dwFlags,// флаги
LPVOID lpMem// указатель на память
);

Флаг может быть HEAP_NO_SERIALIZE что бы отключить механизмы синхронизации. При успешном выполнении возвращаемое значение ненулевое.

Смотрим пример:

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"


void main()
{

HANDLE hHeap;// указатель на кучу
hHeap=HeapCreate(0,0x01000,0);// создать
if (hHeap!=NULL)// если создана удачно
{
char *strName=NULL;// указатель на память
strName=(char*)HeapAlloc(hHeap,0,100);// выделить в нашей памяти место
if (strName!=NULL)// если удачно
{
// Разрушить и сообщить в случае ошибки
if (HeapFree(hHeap,0,strName)==0)
cout << "Error Free" << endl;
}

// Разрушить и сообщить в случае ошибки
if (HeapDestroy(hHeap)==0)
cout << "Error delete Heap" << endl;
}
else
cout << "Error Create Heap" << endl;
}
 
« Предыдущая статья   Следующая статья »