【问题标题】:Pointer points to NULL in vector指针指向向量中的 NULL
【发布时间】:2016-10-05 11:56:26
【问题描述】:

所以我有这个类,它在我的一些对象生成后保存它们。我将带您了解它们:

dungeon 是指向 Dungeon 类对象的指针,该对象在名为 dungeonLayers 的向量中保存了一些 DungeonLayers,然后该向量保存了 Chambers 名称的向量(地牢已填满)

当我运行这段代码时:

Game::Game(std::vector<Enemy>* e, Dungeon* d, Hero* h) {
    enemies = e;
    dungeon = d;
    hero = h;
    DungeonLayer *currentLayer = dungeon->dungeonLayers.at(0);
    Chamber *currentChamber = currentLayer->chambers.at(0);
};

currentLayer 和 currentChamber 都指向 NULL,但是当我在我放在那里的断点处查看当地人时,dungeonLayers.at(0) 中充满了“地牢”中的 DungeonLayer。为什么我的 currentLayer 指向 NULL?

我是 C++ 新手,所以这就是我问这个问题的原因,我可能会在这里做一些非常明显的错误。

【问题讨论】:

  • 你在我希望的分配之后设置断点?您正在经历的屏幕截图将适合此处。
  • 尝试:DungeonLayer * cl = &(dungeon->dungeonLayers[0]);
  • @Jelmer 如果可行,您发布的代码可能无法编译,更不用说运行了。
  • minimal reproducible example.... 来吧,你已经在这里一年了!
  • 只是一些小事,通常最好在类成员变量前面加上m_ 这样的东西,它对可读性有很大帮助,你也应该使用初始化列表和后面的分号您的构造函数定义不是必需的。

标签: c++ c++11 pointers vector


【解决方案1】:
DungeonLayer *currentLayer = dungeon->dungeonLayers.at(0);
Chamber *currentChamber = currentLayer->chambers.at(0);

形式上是错误的,因为 *currentLayer 是一个指针,这意味着:

currentLayer contains address of an object of type DungeonLayer

所以你没有正确初始化currentLayer。 指针类型的正确使用方法:

DungeonLayer *currentLayer = &(dungeon->dungeonLayers[0]); //address of something 

这清楚吗?或者我会尝试换一种更好的形式。

【讨论】:

  • DungeonLayer *currentLayer = &(dungeon->dungeonLayers.at(0));我现在有这样的东西并且可以工作,代码也可以编译!谢谢:)
猜你喜欢
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
相关资源
最近更新 更多