Шаг 121 - HeapAlloc и HeapFree

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

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

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.