Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Доступ до ділянок динамічної пам'яті
Вказівники часто використовують для роботи з динамічною пам'яттю. Доступ до виділених ділянок динамічної пам'яті (динамічних змінних) можливий тільки через вказівники. При визначенні вказівника бажано виконати його ініціалізацію (присвоєння початкового значення). Використання неініціалізованого вказівника приводить до помилки. Ініціалізація вказівника полягає в виділенні ділянки динамічної пам'яті і присвоєння її адреси вказівнику: int *n= new int; - виділення динамічної пам'яті, достатньої для розміщення величини типу int і запис адреси цієї ділянки в змінну n або int *n; (оголошується вказівник n) n = new int; (виділяється пам'ять для цілого числа і n робиться вказівником на цю пам'ять). Наступний код показує, як виділити пам'ять для величин з плаваючою точкою подвійної точності: double - double *d; d = new double. int *m=new int (20) - аналогічно попередньому, але з ініціалізацією динамічної змінної значенням 20 int *z=new int [10] - виділення пам'яті для масиву з 10 елементів Приклад 18 #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); system(" pause"); } Скомпілюйте наведений приклад. Як і чому він так працює? Коли виконується функція main(), виділяється пам'ять і ініціалізується вказівник, щоб він вказував на цю пам'ять. Коли блоку коду завершується, виділена пам'ять залишається недоторканою і вказівник po все ще вказує на неї, тобто, динамічне виділення відрізняється тим, що пам'ять, яка була виділена не звільняється після завершення блоку коду. З пам'яттю завжди існують складнощі і в даному випадку досить серйозні, але ці складнощі можна з легкістю обійти. Проблема полягає в тому, що не дивлячись на те, що пам'ять, яка була виділена динамічно, залишається недоторканою, вона ніколи не звільняється автоматично. Пам'ять буде залишатися виділеною до тих пір, поки ви не скажете комп'ютеру що вам вона більше не потрібна. Проблема в тому, що якщо ви не скажете системі, що пам'ять вам більше не потрібна, вона буде займати місце, яке, можливо, необхідно іншим додаткам або частинам вашої програми. Зокрема це може призвести до збою системи через використання всієї доступної пам'яті, тому це дуже важливо.
|