Создав кучу, есть возможность выделить в ней память.
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;
}
Загрузить проект |Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.
Используются технологии uCoz
|