![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Звільнення пам'яті
Звільнення пам'яті, виділеної за допомогою операції 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.
|