我对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>
如您所见,我已将指针放在Header文件中,该文件会生成访问冲突写入位置和此行的地址
m_Airframe = new AC_Airframe_A330();
如果我对Header行进行注释,并取消注释Initialize函数中的行,则可以正常工作。为什么是这样?我希望m_Airframe对象可用于Initialize函数之外的其他内容。
我做错了什么?
答案 0 :(得分:3)
指针m_App
由空指针常量初始化。
AC_App * m_App;
因此,当调用成员函数Initialize
时
if (SUCCEEDED(m_App->Initialize()))
它尝试以无效地址
访问其数据成员m_Airframe = new AC_Airframe_A330();
和错误&#34;访问违规&#34;发行。
您必须分配(或定义)此指针将引用的对象。
答案 1 :(得分:1)
在使用m_App
的任何引用之前,您必须使用new
:
m_App = new AC_App();