Витік пам'яті

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Витік пам'яті (англ. memory leak) — процес, при якому відбувається постійне зменшення доступної програмі оперативної пам'яті, причому програма не має інформації про більшу частину зайнятої пам'яті. Дана помилка свідчить про те що не уся виділена пам'ять видаляється.

Витоки пам'яті найчастіше зустрічаються у мовах програмування, які надають користувачеві можливість самому керувати пам'яттю.

Опис[ред.ред. код]

Виконання наступного коду на C++ призводить до витоку пам'яті:

/*1*/ int *pointer = NULL;
/*2*/ for (int i = 0; i < 10; i++) {
/*3*/   pointer = new int[100];
/*4*/ }
/*5*/ delete [] pointer;

На кожній ітерації циклу виділяється пам'ять для 100 цілих чисел типу int і адреса виділеної пам'яті записується у змінну pointer, затираючи адресу попереднього виділеного блоку пам'яті. У 5-му рядку відбувається видалення об'єкта, створеного на останній ітерації циклу. Усі попередні 9 об'єктів залишаються в динамічній пам'яті. До них неможливо ні отримати доступ з програми, ні видалити, оскільки немає змінних, які б зберігали їх адреси.

Небезпека[ред.ред. код]

Динамічна пам'ять — це ресурс дуже обмежений. У випадку, якщо програма використала (зайняла) усю виділену для неї пам'ять, вона аварійно завершується операційною системою. Навіть невеликі витоки пам'яті у програмі, яка працює довгий час, можуть призвести до її аварійного завершення.

Способи боротьби[ред.ред. код]

Дивіться також[ред.ред. код]