【发布时间】:2018-03-23 17:26:53
【问题描述】:
我正在学习 C++,但现在我遇到了迭代器的问题。这是我的情况:我这里有这段代码。
// std::list<Dragon*> dragons = cave.getDragons();
for (std::list<Dragon*>::iterator it = cave.getDragons().begin(); it != cave.getDragons().end(); it++){
os << std::endl << (*it)->getName();
}
它返回一个分段错误。这是我的列表和我的 getDragons() 方法:
std::list<Dragon*> dragons;
std::list<Dragon*> getDragons() const {return dragons;}
我的问题是...为什么我会出现这样的分段错误,但是如果我使用评论了的 dragons 变量,不要这样做?谢谢!
【问题讨论】:
-
你有一个
Dragon*s 的列表,然后在它的开头创建一个迭代器,然后删除该列表并让它被销毁。然后你继续将它与一个迭代器进行比较,以得到一个类似的销毁列表。无论如何,使用基于范围的 for 循环(foreach 循环:for (auto* dragon : cave.getDragons())) -
getDragons()返回一个副本。也许您需要参考? -
有一个测试器,它必须使用以下代码:
auto it = cave->getDragons().begin();它适用于我的第一个解决方案,但不适用于测试器 -
好吧,也许我不得不说它工作一次,而且只有一次。我可以读取列表中的第一个元素,但不能读取第二个。
标签: c++ list c++11 iterator segmentation-fault