Витік дескриптора () — це тип програмної помилки, який виникає, коли комп'ютерна програма запитує дескриптор ресурсу, але не звільняє дескриптор, коли він більше не використовується. Якщо це відбувається часто або повторюється протягом тривалого часу, велика кількість дескрипторів може бути позначена як зайнята і, таким чином, стати недоступною, що спричиняє ресурсний голод або аварійне завершення роботи.
Термін походить від витоку пам'яті. Витоки дескрипторів, як і витоки пам'яті, є окремими випадками витоків ресурсів.
Причини
Однією з причин витоку дескрипторів є помилкове припущення програміста, що отримання дескриптора сутності є лише отриманням некерованого посилання, без розуміння того, що насправді виконується підрахунок, копіювання або інша операція. Інша причина виникає через недосконалі шаблони проєктування обробки винятків, коли програмісти не враховують, що в разі виникнення винятку та передчасного виходу з підпрограми код очищення в кінці підпрограми може не бути виконаний.
Приклад Прикладом цього може бути отримання дескриптора пристрою відображення в GDI для Microsoft Windows. Програмісти можуть використовувати цей дескриптор для перевірки певної властивості (наприклад, запиту підтримуваних роздільних здатностей), а потім просто продовжити роботу, так і не звільнивши дескриптор. Якби дескриптор був лише вказівником на певну структуру даних без додаткового керування, вихід дескриптора за межі області видимості не спричинив би проблем. Однак у багатьох випадках такі дескриптори необхідно явно закривати або звільняти, щоб уникнути витоку пов'язаних із ними ресурсів; точні вимоги щодо того, що потрібно робити з дескриптором, залежать від інтерфейсу.
Примітки