Существует распространенная ошибка, возникающая во время выполнения 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 и скрывается за неинформативным сообщением об ошибке?