Создав кучу, есть возможность выделить в ней память.
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;
}