C++指针访问冲突写入位置

C++ pointer access violation writing location

本文关键字:位置 访问冲突 指针 C++      更新时间:2023-10-16

我有一个这样的类:

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;
}