访问冲突读取位置0x00000004

时间:2013-08-22 18:49:11

标签: c++

我有一个像这样的班主任:

class Player
{
    public:
    Player();
    ~Player(void);
    Sprite *sprite;
    Sprite *rocket;

    void draw(int x, int y, SpaceInvaders *system);
}

并在Player.cpp中

void Player::draw(int x, int y, SpaceInvaders *system) {

    sprite = system->createSprite("data/player.bmp");
    sprite->draw(x, y);

}

Player::~Player(void)
{
    sprite->destroy();
    rocket->destroy();
}

这个draw方法在main中的while循环中调用:

player.draw(int(xPos), 480-32, system);

游戏运行良好,直到我在窗口X.那是我在Player :: draw方法的第一行得到“访问冲突读取位置0x00000004”的时候。 我读过它可能是由于传递空指针或空引用,但我不知道如何解决这个问题。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

这很可能是因为当关闭窗口时,在调用draw时会有东西被破坏 - 很可能是系统指针。

在你的情况下,当用户想要关闭它的窗口时,永远不应该调用draw(除非x调用另一个函数来启动某种关闭过程)。最好的方法是首先验证系统不是NULL或更好,使用共享指针确保它在使用时仍然有效。之后,你要确保在窗口关闭时不调用绘图 - 这应该在调用绘图函数时(或者上面取决于你设计应用程序的方式)。

在旁注中,除非你有一个缓存机制(即使这不是最好的方法),你每次绘制时都会重新创建精灵。我建议你保留一个成员变量并在construtor中初始化sprite。

相关问题