Чому "вилітають" програми.

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