Шаг 121 - HeapAlloc и HeapFree.

www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

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

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
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz