C++指针访问冲突写入位置
C++ pointer access violation writing location
我有一个这样的类:
class MyClass
{
public:
MyClass();
~MyClass();
void addPlayer(Player* player);
private:
Player* p_player;
}
addPlayer方法试图完成以下操作:
p_player = player;
其思想是存储关于类型为Player的对象的信息,以便能够动态检查其位置。但是,此解决方案会导致"访问冲突写入位置"。使用:
Player* _player = player;
在函数中不会崩溃,但这意味着我不会将指针存储在类本身中,以便在该类的其他函数中使用。
编辑:这个问题很可能是与项目中其他地方有关的问题。我会更仔细地从头开始重做项目的一部分。谢谢你的回答。
什么是Player*
原始指针?它是拥有的指针吗?它是观察的指针吗?
如果它是一个拥有指针,那么类中不应该只有一个原始指针:您最好使用智能指针,如unique_ptr
(或shared_ptr
):
#include <memory> // for unique_ptr
class MyClass {
...
private:
std::unique_ptr<Player> m_player;
};
您可能想阅读《三条规则》,了解有关C++中类副本和正确资源管理的更多信息。
如果它是一个观察指针,那么原始指针就可以了;但请确保观察到的Player的生存期超过引用它的MyClass
实例的生存期。
听起来你有:
void MyClass::addPlayer(Player* player)
{
Player _player = player;
}
更改为:
void MyClass::addPlayer(Player* player)
{
p_player = player;
}
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 0xC0000005:读取位置0xCDCDCDC1时发生访问冲突
- 0xC0000005:读取位置0xCDCDCDCD时发生访问冲突
- 读取类的析构函数中的位置时发生访问冲突
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 创建 2D 数组0xCCCCCCCC访问冲突写入位置
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 0xC0000005:访问冲突读取位置0x0000000000000008
- 使用动态数组访问冲突写入位置
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- vc++ 访问冲突读取位置
- C++ - 智能指针 - 访问冲突读取位置0xDDDDDDDD
- C++访问冲突读取位置错误
- 调用隔离后访问冲突执行位置0x0000000000000000:New()