русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Динамічне виділення пам’яті


Дата додавання: 2014-04-22; переглядів: 1837.


До цього часу ми зберігали дані в статичній і автоматичній пам'яті. Статична пам’ять використовується для зберігання глобальних і статичних змінних. Змінні статичної пам'яті створюються на початку роботи програми і видаляються з пам'яті при її завершенні. Автоматична пам’ять зберігає аргументи функцій і локальні змінні. Елементи пам'яті, що зберігаються в автоматичній пам'яті, створюються і знищуються за необхідністю.

Третій тип пам'яті – це динамічна пам’ять. Для використання цієї пам'яті під час виконання програми необхідно явно її виділити, а після використання – звільнити. Елементи даних, що зберігаються в динамічній пам'яті, існують до моменту звільненні пам'яті або до моменту завершення програми. Таким чином змінні, що зберігаються в динамічній пам'яті, не звільняються автоматично при виході з області видимості. Завдяки цьому можна створити змінну всередині функції, а використовувати за її межами.

Виділення пам'яті виконується з допомогою оператора new. Синтаксис оператора такий:

 

new тип_даних;

 

тут тип даних – будь – який допустимий тип даних або клас. Оператор повертає вказівник на виділену ділянку пам'яті, який необхідно зберегти у змінній – вказівнику відповідного типу.

Пам’ять, яка виділяється за допомогою оператора new, після використання має бути звільнена оператором delete. Якщо пам’ять не звільнити, вона буде недоступною для виконання інших операцій. Оператор delete виконується над вказівником на ділянку пам'яті, яка була виділена за допомогою оператора new, або над нульовим вказівником. Синтаксис оператора delete такий:

 

delete вказівник;

 

Після звільнення пам'яті зручно присвоїти вказівнику нульове значення. Це дозволить уникнути помилку, яка виникне при спробі повторного звільнення пам'яті. Приклад динамічного виділення пам'яті:

 

#include <iostream>

using namespace std;

int main() {

int * p;

p = new int; // Виділення пам’яті

* p = 123; // Використання пам’яті

cout << * p << endl; // Використання пам’яті

delete p; // Звільнення пам’яті

}

 

При динамічному виділенні пам'яті для масивів в квадратних дужках необхідно записати вираз, який буде визначати кількість елементів масиву. На відміну від оголошення масивів, цей вираз не обов’язково має бути константним, можна використовувати значення змінних. Для звільнення виділеної ділянки пам'яті використовують оператор delete, після якого записують квадратні дужки і ім’я вказівника. Приклад динамічного створення масивів:

 

#include <iostream>

using namespace std;

int main() {

int * p, n = 10;

p = new int[ 10 ];

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

p[ i ] = i;

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

cout << * ( p + i ) << endl;;

delete [ ] p;

}


<== попередня лекція | наступна лекція ==>
Масиви символьних рядків і масиви вказівників | Структури і об’єднання. Оголошення і ініціалізація структур


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн