В чем причина появления сообщения «Это приложение необычным образом запросило среду выполнения»?

Среда выполнения 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);

Поэтому я должен попытаться выяснить, что это на самом деле означает:

  • Что означает завершить работу библиотека времени выполнения Visual C? (msvcrt - это dll; вы не завершаете ее, просто больше не используете)
  • Каким будет обычный способ завершить работу MSVCRT?
  • Может ли кто-нибудь выбрать , чтобы завершить его необычным способом?
  • Является ли сегодняшний необычным способом на самом деле давно устаревшей формой того, что раньше было обычный способ?
  • Если бы я (ошибочно) завершил его необычным способом, что бы я сделал, чтобы завершить его обычным способом?

Другими словами: какая ошибка улавливается MSVCRT и скрывается за неинформативным сообщением об ошибке?

59
задан Ian Boyd 13 November 2014 в 14:29
поделиться