【问题标题】:Having an issue with pointers [closed]指针有问题[关闭]
【发布时间】:2014-12-17 20:57:46
【问题描述】:

您好,我开始使用 c++ 编程的时间不长,但在其他语言方面有几年的经验。目前我正在开发一款基础游戏,玩家将在最终幻想风格的游戏中与他们的怪物对抗 AI 怪物。

冠军类继承自 AbstractMonster 类,我希望玩家能够从选择中选择他们的起始怪物。然而,目前我只有一个程序,好像我可以让它工作,我应该能够得到其余的

我遇到的问题是指向玩家怪物的指针,因为它不断提出 a.访问冲突写入位置0x00000000。

这是我目前正在使用的头文件的唯一部分

#include "AbstractMonster.h"
#include "Champion.h"

class mainGame{
public:
    void createMonster()
private:    
    AbstractMonster* playerMonster = nullptr;
}

.cpp文件中的函数如下

void mainGame::createMonster(){    
    playerMonster = new Champion(); //this is the line the errors at and it highlights playerMonster  
}

任何帮助将不胜感激,因为我已经有这个问题了几天了。

【问题讨论】:

  • 那么如果 input != 1 ,你在哪里分配内存?
  • 没有足够的代码来确定问题。
  • 你可能在某处有一个空指针,即一个不指向对象的指针,当你上面的输入不是 1 时会发生这种情况。
  • 冠军和萨满头文件是什么样的?它们都继承自 AbstractMonster 吗?
  • 这个错误听起来像一个空指针。

标签: c++ pointers memory


【解决方案1】:

Access violation writing location 0x00000000. 告诉我您正在访问一个从未分配给new 对象的指针。我会检查您使用 playerMonster 的位置并确保它有效。一个很好的检查方法是当你先声明 playerMonster 设置它等于nullptr

AbstractMonster* playerMonster = nullptr;

然后在你使用它的地方检查它是否仍然为空if (plasyerMonster == nullptr)

【讨论】:

  • 空指针不走运
  • @FraserS 在调试器中启用访问冲突中断。然后当它停止回溯调用堆栈以查看程序中导致访问冲突的代码行。
  • 没有运气添加 nullptr。没有包含足够的信息
  • @drescherjm 好的,我已经完成了,它说第 54 行,这是我上面所说的行。我在 playerMonster 上放了一只手表,我得到了 的价值。有什么想法吗?
  • 也许 mainGame 在那里为空。
猜你喜欢
  • 2012-09-26
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多