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