新人求助,关于iterator,调试中弹框报错list iterator not dereferencable

oda356 2016-07-06 08:51:49
list<TreeNode*>::iterator searchSon(char c)
{
cout << sonNodes.size();
auto it = sonNodes.begin();
for (; it != sonNodes.end(); it++)
{
if ((*(*it)).getData() < c)
continue;
else if ((*(*it)).getData() == c)
break;
}
return it;
}

这个函数报错了。它对一个树节点的子节点列表按照节点值进行搜索,有另外一个函数管理树插入,在插入之前先搜索子节点对应位置,以使子节点按照值的顺序排列。问题是在向只有根的树插入第一个带字幕值的节点时,搜索和插入都没有出错,而在向这个第一个带值的节点插入前的搜索时出现了list iterator not dereferencable错误。在auto it = sonNodes.begin();这一步弹框。请问我的代码出现了什么问题?能指教一下吗?谢谢。我把树插入的函数列在下面:

void insertWord(string s)
{
TreeNode* tNPtr=treeRoot;
if (s.length() > 0)
{
for (int i = 0; i < s.length(); i++)
{
list<TreeNode*>::iterator iIt = (*tNPtr).searchSon(s[i]);
if ((iIt==(*tNPtr).getSonEnd())||(*(*iIt)).getData() != s[i])
{
TreeNode iTSon = TreeNode(s[i], tNPtr);
(*tNPtr).sonInsert(&iTSon);
tNPtr = (&iTSon);
}
else
{
tNPtr = (*iIt);
}
}
}
...全文
247 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-07-06
  • 打赏
  • 举报
回复
STL的迭代器不可引用,可能是越界了
小灸舞 2016-07-06
  • 打赏
  • 举报
回复
原因很多,可能是迭代器失效
按Alt+7键查看Call Stack

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧