Среда выполнения Visual C выдает типичную ошибку:
Это приложение запросило среду выполнения необычным образом.
За дополнительной информацией обращайтесь в службу поддержки приложения.
Что на самом деле означает это сообщение об ошибке ?
Позвольте мне использовать притчу, чтобы точно объяснить, о чем я спрашиваю.
Если я вижу сообщение:
Исключение: нарушение доступа (0xc0000005), адрес 0x702be865
Это нарушение доступа не имеет ничего общего с сексуальными домогательствами или попыткой взлома моего компьютера (точно так же, как General Failure был бригадным генералом, который пытался прочитать мой диск C, или что вас могли отправить в тюрьму за выполнение незаконной операции в Windows 95).
В этом случае нарушение доступа соответствует константе EXCEPTION_ACCESS_VIOLATION
(объявленной в winbase.h
со значением 0xC0000005). Эта константа - один из возможных кодов ошибки исключения, который может быть возвращен в структуре EXCEPTION_RECORD
. Код ACCESS_VIOLATION
означает, что программа попыталась прочитать или записать по адресу в памяти, которого быть не должно. Если вы попытаетесь прочитать адрес памяти, который никогда не был выделен, то вы делаете что-то ужасно плохое - и об этом сообщает исключение.
Это обычно вызывается, когда программа имеет указатель на память, который недействителен или больше не действителен. Решение - прекратить попытки доступа к недействительной памяти.
Примечание : Я не спрашиваю:
- почему программа x получает ошибку C0000005?
- почему мой код получает нарушение доступа?
- как мне отладить нарушение прав доступа?
Итак, если бы я спросил вас, что вызывает нарушение прав доступа , вы бы не посоветовали мне проверить трассировку стека или посмотреть окно вывода, или разместить образец кода.Вы бы сказали: «Недействительная попытка доступа к памяти».
Вернемся к моему вопросу. Что означает следующая ошибка:
Это приложение необычным образом запросило завершение работы среды выполнения.
Я (вполне) уверен, что библиотека времени выполнения Microsoft Visual C не имеет функции:
void TerminateRuntime(bool UnusualWay);
Поэтому я должен попытаться выяснить, что это на самом деле означает:
Другими словами: какая ошибка улавливается MSVCRT и скрывается за неинформативным сообщением об ошибке?