读取位置0x00000004时发生访问冲突
Access violation reading location 0x00000004
我有一个类似的类播放器:
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();
}
这种绘制方法主要在while循环中调用:
player.draw(int(xPos), 480-32, system);
游戏运行良好,直到我打开窗口。这时,我在Player::draw方法的第一行得到了"访问违规读取位置0x00000004"。我读到它可能是由于传递了一个空指针或空引用,但我不知道如何解决这个问题。
非常感谢您的帮助,谢谢!
这很可能是因为在关闭窗口时,调用draw时会破坏一些东西——很可能是系统指针。
在您的情况下,当用户想要关闭其窗口时,不应该调用draw(除非x调用另一个函数来启动某种关闭过程)。最好的方法是首先验证系统是否为NULL,或者更好的方法是使用共享指针来确保它在使用时仍然有效。之后,你必须确保draw在窗口关闭时不会被调用——这应该在调用draw函数时完成(或者更高,这取决于你如何设计你的应用程序。
顺便说一句,除非你有缓存机制(即使这不是最好的方法),否则每次绘制精灵时,你都会重新创建它。我建议您保留一个成员变量,并在构造器中初始化精灵。
相关文章:
- 写入位置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()