Создав кучу, есть возможность выделить в ней память.
LPVOID HeapAlloc ( HANDLE hHeap, // указатель на кучу где можно выделить память DWORD dwFlags, // флаги SIZE_T dwBytes // обьем выделяемой памяти );
Флаги могут быть следующие:
При успешном выполнении возвращается указатель на память, а при ошибке либо 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; }