Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pit_SPZ_4_modul_2012.doc
Скачиваний:
1
Добавлен:
30.08.2019
Размер:
184.32 Кб
Скачать

Int main()

{

HANDLE hHeap;

int *a = NULL; // указатель на массив

int size = 1000; // размерность массива

// получаем дескриптор кучи процесса, созданной по умолчанию

hHeap = GetProcessHeap();

if (!hHeap)

{

cout << "Heap create failed." << endl;

return GetLastError();

}

// распределяем память под массив

a = (int*)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, size * sizeof(int));

// распечатываем один элемент массива

cout << "a[10] = " << a[10] << endl;

// освобождаем память из кучи

if (!HeapFree(hHeap, NULL, a))

{

cout << "Heap free failed." << endl;

return GetLastError();

}

return 0;

}

#include <windows.h>

#include <iostream.h>

Int main()

{

HANDLE hHeap;

int *a = NULL; // указатель на массив

int h_size = 4096; // размер кучи

int a_size = 2048; // размер массива

// создаем кучу динамически

hHeap = HeapCreate(HEAP_NO_SERIALIZE, h_size, h_size);

if (!hHeap)

{

cout << "Heap create failed." << endl;

return GetLastError();

}

// распределям память под массив

a = (int*)HeapAlloc(hHeap, NULL, a_size);

// обрабатываем ошибку в случае неудачи

if (!a)

{

cout << "Heap allocation failed." << endl;

return GetLastError();

}

// распечатываем распределённую память

cout << "a[10] = " << a[10] << endl;

// освобождаем память из кучи

if (!HeapFree(hHeap, NULL, a))

{

cout << "Heap free failed." << endl;

return GetLastError();

}

// разрушаем кучу

if (!HeapDestroy(hHeap))

{

cout << "Heap destroy failed." << endl;

return GetLastError();

}

return 0;

}

  1. Перерозподіл пам’яті із купи.

#include <windows.h>

#include <iostream.h>

Int main()

{

HANDLE hHeap;

int *a = NULL; // указатель на массив

int h_size = 4096; // размер кучи

int a_size = 5; // размер массива

// создаем кучу динамически

hHeap = HeapCreate(HEAP_NO_SERIALIZE | HEAP_GENERATE_EXCEPTIONS,

h_size, 0);

if (!hHeap)

{

cout << "Heap create failed." << endl;

return GetLastError();

}

// распределяем память из кучи

a = (int*)HeapAlloc(hHeap, NULL, a_size * sizeof(int));

// инициализируем и распечатываем массив

for (int i = 0; i < a_size; i++)

{

a[i] = i;

cout << "a[" << i << "] = " << a[i] << endl;

}

// распределяем дополнительный блок

a = (int*)HeapReAlloc(hHeap, HEAP_ZERO_MEMORY, a,

2 * a_size * sizeof(int));

// распечатываем элементы массива

for (i = 0; i < 2 * a_size; i++)

cout << "\ta[" << i << "] = " << a[i] << endl;

// разрушаем кучу

if (!HeapDestroy(hHeap))

{

cout << "Heap destroy failed." << endl;

return GetLastError();

}

return 0;

}

  1. Блокування та розблокування купи.

#include <windows.h>

#include <iostream.h>

HANDLE hHeap;

DWORD WINAPI thread(LPVOID)

{

int *a;

// бесконечный цикл распределения и освобождения памяти из кучи

for ( ; ; )

{

// распределяем память

a = (int*)HeapAlloc(hHeap, NULL, sizeof(int));

cout << "\tHeap allocated." << endl;

// освобождаем память

HeapFree(hHeap, NULL, a);

cout << "\tHeap freed." << endl;

// немного подождем

Sleep(2000);

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]