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

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

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

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

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

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

або

/*1*/ int *pointer = NULL;
/*2*/ for( int i = 0; i < 10; i++ ) {
/*3*/ pointer = (int *) malloc( sizeof(int )*10);
/*4*/ }
/*5*/ free( pointer );

Якщо покласти що розмір типу int дорівнює 4 байти, то витік пам'яті після закінчення становитиме 360 байт. У даних прикладах витік пам'яті розташований на третій строчці, кожного разу при новій ітерації виділяється вказівник на десять елементів типу int і цей вказівник записується у змінну pointer. Остання п'ята строка очищує змінну pointer, але лише останнє її значення.

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

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

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

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