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;
}