在标头中声明指针会导致访问冲突
Declare Pointer in Header results in Access Violation
我对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>
正如你所看到的,我已经把指针放在头文件中,它生成了一个访问违规写入位置和这一行的地址
m_Airframe = new AC_Airframe_A330();
如果我在Initialize函数中注释掉Header行,并取消注释该行,它就可以工作了。为什么会这样?我希望m_Airframe对象可用于Initialize函数之外的其他对象。
我做错了什么?
指针m_App
由空指针常量初始化。
AC_App * m_App;
因此,当成员函数Initialize
被称为时
if (SUCCEEDED(m_App->Initialize()))
它试图访问其位于无效地址的数据成员
m_Airframe = new AC_Airframe_A330();
并发出错误"访问违规"。
您必须分配(或定义)一个将由该指针引用的对象。
在使用对m_App
的任何引用之前,必须将其与new
:一起分配
m_App = new AC_App();
相关文章:
- C++尝试深度复制唯一指针时出现内存访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 使用智能指针读取访问冲突
- C 指针转换会导致内存访问冲突
- C++:读取 Lambda 捕获的指针时出现访问冲突
- 初始化指针时出现写入访问冲突
- 不能对基于数组的指针使用数组运算符(读取访问冲突)
- C++ - 智能指针 - 访问冲突读取位置0xDDDDDDDD
- 调用指针时违反 C++ Typedef 访问冲突
- 为什么未初始化的指针会导致接近 0 的 mem 访问冲突
- 执行指针时发生C++访问冲突
- C++:使用std::ifstream读取二进制文件后删除缓冲区/指针时发生访问冲突
- 指针未指向 NULL 时的访问冲突
- 指针导致访问冲突
- 在标头中声明指针会导致访问冲突
- 字符双指针程序中的访问冲突
- 使用智能指针时发生访问冲突
- 使用指向对象实例的指针列表的访问冲突
- 访问冲突:指针错误
- 写入位置0x00000000时发生访问冲突.指针问题