C++ 从迭代器调用的.value()会导致Appcrash

C++ 从迭代器调用的.value()会导致Appcrash,c++,qt,C++,Qt,我有下面的代码,我想在QMap中找到与等于“标记名”的键相关联的值。 一旦我将迭代器定位到正确的位置,我想获取这个值(应该是qstring的QVector),看看是否可以在其中找到我想要的内容 但每当我尝试执行p.value()时,我的程序就会崩溃。 我检查了我的调试器,奇怪的是p的键和值在调试面板中显示为“不可访问” QMap<QString, QVector<QString> >::iterator p = associations.find(tagName); i

我有下面的代码,我想在QMap中找到与等于“标记名”的键相关联的值。 一旦我将迭代器定位到正确的位置,我想获取这个值(应该是qstring的QVector),看看是否可以在其中找到我想要的内容

但每当我尝试执行p.value()时,我的程序就会崩溃。 我检查了我的调试器,奇怪的是p的键和值在调试面板中显示为“不可访问”

QMap<QString, QVector<QString> >::iterator p = associations.find(tagName);

int index = p.value().indexOf(noteName);

return (index != -1);
QMap::迭代器p=associations.find(标记名);
int index=p.value().indexOf(noteName);
返回(索引!=-1);

任何帮助或提示都将不胜感激

在取消引用之前,检查迭代器是否有效,即是否在映射中找到了某些内容:

return p != associations.end() && p.value().indexOf(noteName) != -1;

您应该首先检查迭代器是否有效,即是否在映射中找到了某些内容。
if(p==associations.end())返回
。如果(bool_expr)返回true,则永远不要写入
;否则返回false。它与返回bool_expr相同,只长了一点。@Marcelocontos是的,对不起,我很累,否则我会注意到的,现在很惭愧@塞尔菲拉:别担心。我偶尔在阅读六个月前写的代码时会感到毛骨悚然。是的,谢谢,这确实阻止了程序崩溃,所以现在我面临另一个问题:我的变量关联(我的QMap)确实包含一个与标记名键对应的键/值对(我在调试时已经检查过了),那么“查找”怎么会出现呢呼叫似乎找不到它?@Selphira这基本上是不可能的,所以你有另一个问题,我们在你发布的代码中看不到。@juanchopanzaz好的,所以我真的错了,你是对的。你的评论让我想了想,结果发现我认为作为参数传递的东西(我的标记名)并不是我想象的那样。我在错误的地方寻找我的错误。无论如何,这个答案和所有的评论让我解决了我的问题,所以谢谢!