C ++指针访问违规写入位置

时间:2014-04-11 17:48:25

标签: c++ pointers

我有一个这样的课程:

class MyClass
{
public:
    MyClass();
    ~MyClass();
    void addPlayer(Player* player);
private:
    Player* p_player;
}

addPlayer方法尝试完成以下操作:

p_player = player;

这个想法是存储有关Player类型对象的信息,以便能够动态检查其位置。但是,此解决方案会导致访问违规写入位置"。使用:

Player* _player = player;

在函数中不会崩溃,但这意味着我没有将指针存储在类本身中以用于该类的其他函数。

编辑: 该问题很可能是与项目中其他地方相关的问题。我会更仔细地从头开始重做项目的一部分。谢谢你的答案。

2 个答案:

答案 0 :(得分:0)

你的Player*原始指针是什么?它是拥有指针吗?它是观察指针吗?

如果它是一个拥有指针,你的类中不应该只有一个原始指针:你最好使用智能指针,如unique_ptr(或{{1} }):

shared_ptr

您可能希望阅读有关The Rule of Three的更多信息,以获取有关C ++中类副本和正确资源管理的更多信息。

如果它是一个观察指针,那么原始指针就可以了;但请确保观察到的Player的生命周期超过引用它的#include <memory> // for unique_ptr class MyClass { ... private: std::unique_ptr<Player> m_player; }; 实例的生命周期。

答案 1 :(得分:0)

听起来像你:

void MyClass::addPlayer(Player* player)
{
   Player _player = player;
}

将其更改为:

void MyClass::addPlayer(Player* player)
{
   p_player = player;
}