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

Void main(void)

{

// Масив зi 100 елементів

array< int, long> numbers(100);

// Масив з 200 елементів

array<float, float> values(200);

int i;

for (i = 0; i < 50; i++)

numbers.add_value(i);

numbers.show_array( );

cout << "Сума чисел дорівнює " << numbers.sum( ) << endl;

cout << "середнє значення дорівнює " << numbers.average_value( )

<< endl;

for (i = 0; i < 100; i++)

values.add_value(i = 100);

Values.Show_array( );

cout << "сума чисел рівна " << values.sum( ) << endl;

cout << "Середнє значення рівне " << values.average_value( )

<< endl;

}

31. Використовування вільної пам'яті в C++

Якщо програма оголошує масив то компілятор C++ виділяє пам'ять для зберігання його елементів. Для початку розмір масиву може бути не такий великий, щоб вміщати всі необхідні дані. Припустимо, що ви створили масив для зберігання 100 акцій. Якщо пізніше вам буде потрібно зберегти більше 100 акцій, ви повинні змінити свою програму і перекомпілювати її.

З іншого боку, замість резервування фіксованої кількості пам’яті, при створенні масиву, програми можуть виділяти необхідну кількість пам'яті динамічно. Це дозволяє програмам безперервно змінювати об’єм зарезервованої пам’яті. C++ розподіляє пам'ять з ділянок, що називаються вільною пам'яттю [9].

Для резервування динамічної пам’яті в C++ використовують оператор new, як показано нижче:

char *buffer = new char[50];

При використовуванні оператора new програма вказує кількість необхідної пам'яті (динамічної). Якщо оператор new може успішно виділити цей об'єм пам'яті, він спрямовує вказівник на початок виділеної пам'яті. Якщо оператор new не може задовольнити запит програми (можливо, вільної пам'яті вже не залишилося) – він повертає NULL.

Звільнити пам'ять, розподілену за допомогою оператора new, можна використавши оператор delete.

Наступна програма USE_NEW.CPP використовує оператор new для створення 100-байтного масиву:

Void main(void)

{

char *pointer = new char[100];

if (pointer != NULL)

cout << "Пам'ять успішно виділена" << endl;

else

cout << "Помилка виділення пам'яті" << endl;

}

Як бачите, програма відразу перевіряє значення, присвоїне оператором new змінній-вказівнику. Якщо вказівник містить значення NULL, тоді new не зміг виділити запитуваний об'єм пам'яті. Якщо ж вказівник містить не NULLnew успішно виділив пам'ять і вказівник містить адресу початку блоку пам'яті.

Наступний запис використовує new для розподілу пам'яті під масив з 500 значень з плаваючою крапкою:

float *array = new float[500];

Щоб визначити, чи виділив оператор new динамічну пам'ять, ваша програма повинна порівняти значення вказівника з NULL, як показано нижче:

if (array != NULL)

cout << "пам'ять виділена успішно" << endl;

else

cout <<"new не може виділити пам'ять" << endl;

Наступна програма ASK_MEM.CPP запитує у користувача кількість байт пам'яті, яку необхідно виділити, і потім резервує її, використовуючи оператор new: