Я совершенно не знаком с C++, так что несите меня. В моем файле заголовка, у меня есть следующий класс заявил:Объявить указатель в заголовке приводит к нарушению доступа
#include "AC_Airframe_A330.h"
class AC_App
{
public:
AC_App();
~AC_App();
HRESULT Initialize();
AC_Airframe_A330 * m_Airframe;
};
В моем файле C++, я использую следующий код, чтобы запустить программу, и начать создавать свои указатели:
#include "AC_App.h"
AC_App * m_App;
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0);
if (SUCCEEDED(CoInitialize(NULL)))
{
{
if (SUCCEEDED(m_App->Initialize()))
{
m_App->RunMessageLoop();
}
}
CoUninitialize();
}
return 0;
}
HRESULT AC_App::Initialize()
{
//AC_Airframe_A330 * m_Airframe;
m_Airframe = new AC_Airframe_A330();
m_Airframe->Startup_State();
<snip>
Как вам может видеть, я поставил указатели в файле заголовка, который генерирует нарушение доступа Writing Место и адрес на этой линии
m_Airframe = new AC_Airframe_A330();
Если я комментирую строку заголовка из файла и раскомментируйте строку в моем In itialize функция, она работает. Почему это? Я хотел бы, чтобы объект m_Airframe был доступен для других вещей вне функции Initialize.
Что я делаю неправильно?
Я вижу, где 'm_App' используется - но я не вижу, где он когда-либо присвоено значение. Вы вызываете метод на неинициализированном указателе, один указывает на случайный мусор. –
У меня первоначально была линия AC_App * m_App = 0; чтобы NULL это, но это, казалось, не имеет значения? – Horgy
@Igor: Его 'm_App' находится в глобальном масштабе и будет _default initialized_ равным нулю. Так что авария в любом случае разыменована. –