Чому "вилітають" програми
Незалежно від типу, виняток може бути перехоплено і коректно оброблено. Чи не перехоплені винятку потрапляють в кореневій обробник бібліотеки часу виконання або обробник, який встановлюється операційною системою. Якщо це сталося, програма «вилітає» з відображенням повідомлення або вікна аварійного завершення (в Windows). Якщо обробник операційної системи не спрацював (наприклад, був навмисне видалено), програма «падає мовчки». Таким чином, програми «вилітають» внаслідок виникнення виключень, які не можуть бути оброблені. Причини ж виникнення виключень - різні.
У переважній більшості випадків програми «вилітають» внаслідок виконання їх власного коду, що містить явні чи неявні помилки реалізації. Перелік можливих причин виникнення позаштатних ситуацій дуже великий. Це і класичні помилки операцій над числами з плаваючою точкою (наприклад, розподіл на 0), і помилки роботи з пам`яттю (читання або запис за межами адресного простору процесу, доступ до захищених сторінок, запис в області пам`яті, призначені тільки для читання), переповнення стека внаслідок нескінченної рекурсії, і т.д. У цих випадках генеруються апаратні виключення або виключення операційної системи.
До неявним помилок можна віднести різні випадки недостатньої фільтрації вхідних даних, відсутність перевірок значень покажчиків і багато іншого. Такі недоліки призводять до виникнення виняткових ситуацій лише в певних випадках.
Помилки реалізації можуть міститися і в зовнішніх компонентах, які використовуються додатком. Наприклад, в динамічних бібліотеках, які забезпечують необхідний функціонал або модулях доповнень. Програмний код, неявно завантаження в адресний простір процесу (наприклад, з метою перехоплення певних API-функцій), також може стати причиною «падіння» програми.
Багато компонентів і бібліотеки (наприклад, ADO в Windows) використовують механізм програмних винятків як пріоритетний спосіб повідомлення про помилки. Відсутність або недостатньо повна обробка винятків подібного роду додатком може привести до його аварійного завершення навіть в абсолютно нешкідливих ситуаціях (таких як втрата підключення до бази даних).