Есть.
Программы могут быть написаны с использованием техники, называемой исключениями. Вот упрощенное описание того, как они работают:
- Идея состоит в том, что вы можете указать части программы, когда она сталкивается с ошибкой или чем-то, с чем она не может справиться, выдать исключение.
- Другая часть программы была предварительно настроена на перехват исключений - это обработчик исключений.
- Если ошибка является чем-то, что даже обработчик исключений не может иметь с ней дело, он может сделать одну из двух вещей:
- Бросьте его в другой обработчик исключений, который может его обработать.
- Просто выбросьте его "туда" во что угодно - если не существует обработчика исключений, желающего / доступного принять его, операционная система сама перехватывает его, и вы видите диалоговое окно сбоя.
Поэтому, когда программа выходит из строя, она буквально отказывается и прекращает выполнение.
Это отличается, когда программа перестает отвечать на запросы. Программы Windows поддерживают связь с ОС, используя цикл сообщений. Если программа зависает, ожидая ввода-вывода или бесконечного цикла, она прекратит получать сообщения из цикла, и Windows сообщит вам, что программа не отвечает. Одна вещь, которая может привести к неожиданному ожиданию программ при вводе / выводе, - это когда у вас недостаточно ОЗУ, и ОС должна использовать файл подкачки для обработки запросов памяти. Другой может быть, если ваш диск внезапно выйдет из строя и программист никогда не рассматривал возможность того, что запись в файл может быть прервана чем-то вроде этого - или программист сделал что-то вроде «если эта операция не удалась, повторите попытку навсегда».
Так что в этом случае программа все еще работает, она просто больше не общается с Windows.