我使用 std::multimap.lower_bound 方法返回范围结果。但是在容器的相同内容中,有时我得到了错误的迭代器对,它使我的程序崩溃。我可以用visual studio看到容器中的内容,它们都是正确的。而且我使用了multimap的find方法,效果也很好。它只是返回该死的无效迭代器对并使我的程序崩溃,最重要的是,我无法进行任何测试来跳过这种情况。这种情况有什么问题?
我的示例代码如下:
std::multimap<std::string,std::string>::iterator it = tagged_files.lower_bound("vocal");
std::multimap<std::string,std::string>::iterator it_end = tagged_files.upper_bound("vocal");
在大多数情况下,他们运作良好。当我打印it
并it_end
使用 %p(使用 printf)时,它们的结果是 8f98ab9(一个指针值)和 0(同一个键)。当我得到无效的迭代器时,调试消息将显示 8f98ab9(相同值)和 2b8a839(奇怪值)。
此外,大小tagged_files
始终相同。在整个会话期间根本没有插入任何项目,即使收到无效的迭代器也是如此。printf %d with 也证明了这一点tagged_files.size()
。