C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 121 - HeapAlloc и HeapFree / Win 32 API / Win32 API

Шаг 121 - 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;
}

Загрузить проект | | |
Автор Каев Артем.
[AD]