【发布时间】:2012-07-02 00:43:25
【问题描述】:
我读过一些关于这个主题的帖子,但我不知道,使用对象指针的 stl 列表,当我想通过迭代器访问元素函数时,应用程序会得到空指针的错误运行时间。有人会帮我吗?我很感激任何帮助。提前致谢。 这是代码的一部分:
typedef std::list<Actor> listActors;
listActors listactors = pMain->Actors();
listActors::iterator iter = listactors.begin();
std::string nameactor;
nameactor = (*iter)->getName();//Here the app get a run time error of null pointer
【问题讨论】:
-
这完全取决于该列表的填充方式。你还没有向我们展示代码。但我的猜测是第一个元素是一个空指针......
-
您将 Actor 对象存储在列表中,而不是指向 Actor 对象的指针。也就是说,您不能在元素上应用 -> 运算符,因此这应该会引发编译错误。您的代码执行以下操作:
Actor a; a->getName();正确的是:Actor a; a.getName(); -
@DavidFrank:使用如图所示的代码,您是正确的。另一种可能性是 LarriPapi 只是没有显示正确的代码,并且该列表确实是一个指针列表。由于我们都只是在这里猜测,我的猜测是列表为空(
begin() == end()),在这种情况下,iter的取消引用无效。 -
另一种不太可能的可能性是 Actor 重载了 -> 运算符。
-
投票结束,因为 OP 没有提供足够的信息来使其成为一个真正的问题。