Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Звільнення пам'яті






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

delete po;

При цьому змінна-вказівник зберігається і може ініціалізуватися повторно.

З цим все. Ви повинні бути обережні, оскільки потрібно передавати правильний вказівник, вказівник який вказує саме на ту область пам'яті яку ви виділяли а не на незрозуміле сміття. Спроба звільнити пам'ять (за допомогою delete), яка вже була звільнена небезпечна і може призвести до збою програми. Тому наступний оновлений приклад показує як це робити правильно без даремного витрачання пам'яті:

Приклад 19

#include < windows.h>

#include < clocale>

#include < stdio.h>

void main()

{

setlocale (LC_CTYPE, " rus");

int *po;

// зробити po вказівником на нове ціле

po = new int;

*po = 25;

printf(" Значення *po: %d\n", *po);

delete po;

system(" pause");

}

Скомпілюйте наведений приклад.

Якщо ви не видалите пам'ять, то отримаєте так званий " витік пам'яті", коли пам'ять поступово витікає і не може бути повернута, поки програма не закриється.

Керуючи динамічними змінними необхідно:

а) явно створювати і знищувати динамічні змінні та об'єкти;

б) для кожного динамічного об'єкта організовувати принаймні один вказівник, який буде забезпечувати доступу до самого об'єкта.

І останнє попередження щодо масивів: якщо ви виділили пам’ять для масиву з використанням оператору new, як показано в наступному прикладі:

int *p;

p = new int[6];

то повинні потім видалити його з допомогою оператора:

delete[] p;

Зверніть увагу на [] після delete. Це повідомляє компілятор про те, що видаляється цілий масив, а не лише один елемент. Ви повинні використовувати цей метод коли мова йде про масив. В результаті ви отримаєте звільнення пам’яті.

Зауваження: ви не повинні звільняти пам’ять, якщо вона виділялась не через new.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал