При запуске игры система выдаёт: Ошибка при инициализации приложения 0xc0000005 . Как её устранить!!??
Всем привет! Подскажите пожалуйста, как справиться с данной проблемой? Если есть возможность, пошагово.
Всем привет! Подскажите пожалуйста, как справиться с данной проблемой? Если есть возможность, пошагово.
Проблема
Когда инициировать событие __raise или отсоединить событиях машинного кода (__unhook) в неуправляемых приложениях, может появиться следующее сообщение об ошибке:
Необработанное исключение виртуальный адрес в исполняемый файл: 0xC0000005: нарушение прав доступа чтения виртуальный адрес склада
где виртуальный адрес и исполняемый файл являются значения, которые зависят от конкретного приложения.
Перейти к началу страницы | Отправить отзыв
Причина
Проблема возникает, когда конструктор источника событий определен за пределами области действия класса. Список обработчиков событий не инициализируется в конструкторе источника событий в этот код. Таким образом при доступе к неинициализированной памяти возникает нарушение прав доступа.
Перейти к началу страницы | Отправить отзыв
Временное решение
Для временного решения проблемы используйте один из следующих методов:
Способ 1
Определите конструктор источника события в его области действия класса. Для этого замените существующий код:
struct A {
__event void Event();
A();
void bar(){}
};
//Constructor defined outside class scope.
A::A() { }
Следующий код:
struct A {
__event void Event();
A() { }; //Contructor defined in class scope.
void bar(){}
};
Способ 2
Включите код инициализации eventHandlerList в конструкторе источника событий. При этом предполагается, что в CPP-файл, содержащий определение класса источника событий является event.cpp. Введенный код, создаваемый компилятором могут храниться в промежуточный файл с помощью параметра компилятора командной строки /Fx .
В командной строке введите следующую команду:
cl /Fx event.cpp
Введенный код, созданный компилятором, сохраняются в файле с. расширение mrg.cpp. Для event.cpp файл с введенного кода является event.mrg.cpp.
В промежуточный файл, созданный (event.mrg.cpp) добавьте следующий код к конструктору источника событий:
Если исходный класс событий с именем A определен в пространстве имен X, добавьте следующий код:
__eventHandlerList_X_A_Event = 0;
конструктор для a.
Если исходный класс событий с именем A не определен в пространстве имен, добавьте следующий код:
__eventHandlerList_A_Event = 0;
конструктор для a.
Где A — исходный класс событий X является пространством имен для Aи событие – это событие определяется с помощью ключевого слова __event в исходный класс.
Скомпилируйте промежуточный файл в командной строке с помощью следующей команды:
cl event.mrg.cpp