Сбой обычно вызван незаконной инструкцией, например. доступ к недопустимой памяти, деление на ноль и т. д. Обычно это проявляется как хорошо известное исключение, которое обрабатывается операционной системой.
висячие можно разбить на 2 достаточно высоких категорий уровня:
- ТУПИК, как правило, вызваны 2 нитями, конкурирующих за ресурс, каждый из которых требует ресурса, удерживаемого другой поток будет выпущен , Общей причиной этого является приобретение нескольких блокировок в непоследовательных заказах в нескольких потоках, что приводит к общему ABBA deadlock pattern (и это не имеет ничего общего со шведской поп-музыкой).
- Livelock, что означает, что код по-прежнему активно работает, но вы достигли состояния, которое вы не можете оставить. Например:
- состояние 2 процессов/потоков постоянно меняются, никогда не достигая конец условию
- в то время как цикл, где никогда не будет удовлетворено условие выхода, или бессрочный цикл (хотя это растягивая определение «livelock»).
Обновление на основе вопроса комментарий
@Pop, Kristo: Am фактически проверка на код, который висит, но я вижу некоторые проблемы на утечки памяти. Но я не действительно уверен, что если утечка памяти вызывает программу для зависания . - jasonline
Утечка памяти может привести к взрыву программы, но это зависит от различных факторов:
- Размер утечки
- Частота утечки
- Срок применения
Утечки памяти могут привести к двум плохим вещам - постоянному увеличению использования памяти процессом и фрагментации памяти. Обе из них могут привести к сбою в распределении памяти по линии, если ОС не может обеспечить непрерывный блок памяти.
В C++, если оператору new
не удается выделить память, будет выбрано исключение std::bad_alloc
. Это, скорее всего, будет зависеть от ОС, что приведет к сбою (если вы не написали конкретный обработчик в своем приложении для этого исключения и не сможете обработать его более изящно).
Это не настоящий вопрос, список вещей, которые могут вызвать сбой, слишком велик, чтобы отвечать, и этот список иногда зависит от конкретного оборудования или ОС, или может быть много других факторов. –
Я не думаю, что мы можем ответить на этот вопрос, как написано. Существует множество причин, по которым программа может неожиданно выйти или перестать отвечать на запросы. Можете ли вы уточнить, что вы не понимаете? –
@Pop, Kristo: Я действительно проверяю код, который висит, но я вижу некоторые проблемы с утечкой памяти. Но я не уверен, что утечка памяти приведет к зависанию программы. – jasonline