Вам нужно прочитать руководство по процессору, чтобы углубиться в это.Это вызвано "ловушкой", лучше всего описанной как исключение в процессоре.Ловушка прерывает выполнение кода и позволяет оператору системы «перехватывать» обработчик для устранения ошибки.Очень распространенным доброкачественным является сбой страницы, возникающий, когда процессор пытается прочитать данные из ОЗУ, которые еще не отображены.Вот как реализована виртуальная память.
AccessViolation относится к группе ловушек, которые являются серьезными ошибками, с которыми операционная система не знает, как обращаться.Это называется «Общая ошибка защиты» в руководстве по процессору.Это что-то вроде мешка, есть много способов вызвать GPF.Безусловно, наиболее распространенным является попытка чтения памяти, которая не отображается, обычно это происходит из-за повреждения памяти кучи.Затем следует попытка выполнить инструкцию машинного кода, которая недопустима или может быть выполнена только с помощью привилегированного кода, обычно вызванного повреждением стековой памяти.
Эти ловушки настолько же отвратительны, как и процессор, процессор просто не может продолжитьвыполнение программы.Операционная система, конечно, не знает, как с этим справиться, она вызывает исключение AccessViolation, чтобы дать программе шанс вернуть процессор к заведомо исправному коду.Это возможно при использовании ключевых слов __try/__except
в вашем коде.Между прочим, это не очень хорошая идея, кроме как для пользовательских отчетов об ошибках, вы не представляете себе, как состояние вашей программы было изменено до ее смерти и, следовательно, нет способа восстановить ее.
Без такого обработчика SEH это заканчивается защитой, которую обеспечивает Windows.Вы можете предоставить свой собственный SetUnhandledExceptionFilter () , полезный для настройки отчета о сбое.Предоставляемая системой система положит конец этому, запустив WER, компонент Windows Error Reporting.Что в конечном итоге завершает процесс.