我从std :: multimap.lower_bound获得了无效的指针
I got an invalid pointer from std::multimap.lower_bound
i使用std :: multimap.lower_bound方法返回范围的结果。但是在容器的相同内容中,有时我遇到了错误的迭代器对,并且它使我的程序崩溃了。我可以看到带有Visual Studio的容器中的内容,它们都是正确的。而且我使用了Multimap的查找方法,它也效果很好。它只是返回该死的无效迭代器对并崩溃了我的程序,最重要的是,我无法进行任何测试来跳过这种情况。这种情况怎么了?
我的示例代码如下:
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");
在大多数情况下,它们效果很好。当我用%p(使用printf)打印it
和it_end
时,它们的结果为8f98ab9(一个指针值)和0(相同的键)。当我获得无效的迭代器时,调试消息将显示8F98AB9(相同值)和2B8A839(奇怪的值)。
此外,tagged_files
的大小总是相同的。在整个会话期间,根本没有插入任何项目,甚至收到了无效的迭代器。它也由printf%d与 tagged_files.size()
证明。
当我有一个带有标准容器(如MAP,Multimaps,90%的时间)的std容器的无效迭代器时,原因是当我在该容器中删除项目时,我在容器上迭代。
一旦删除了一个项目(甚至在其他容器中插入),则有效的迭代状态为不再保证。
编辑:就像以下评论所说的那样,迭代器的无效规则因容器而异。cf这个问题
edit2:您不会向我们展示如何解除迭代器。您的迭代器是std :: pair,您应该检查返回的迭代器在放置之前不等于your container.end()。但是,由于您不向我们展示您的代码,因此很难说出迭代器。您不会向我们展示输出轨迹的方式。
相关文章:
- 错误:参数中无效地使用了无效表达式
- JNI 在应用程序中检测到错误:在为 innerclass 调用 NewObject 时使用了无效的 jobject
- 如何检查函数是否真的获得了定义为 const 的变量?
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 为什么我在有关文件编码格式的QT代码中获得了混乱的代码
- 即使我传递了无效的类型参数,我为什么还能在没有错误的情况下编译此代码
- 在C 中,Harversine Forumla获得了错误的结果
- 为什么这个程序告诉我传递了无效参数
- C++从结构的数组中获得了错误的值
- C :转换为int和添加时,我的角色数组获得了奇怪的值
- 我在SFML SF :: Renderwindow中获得了黑屏
- 粘贴形成了无效的处理令牌"."
- 数据结构:我获得了不希望的价值
- 提示再次运行程序:修复他们是否输入了无效语句
- 我从std :: multimap.lower_bound获得了无效的指针
- windeployqt错过了一些库,而获得了其他不需要的库
- Linux上的ftruncate给出了无效参数错误
- 嵌套结构:在定义结构指针时使用了无效的非静态成员
- 来自C++客户端的Java DataInputStream readInt()获得了巨大的价值
- 使用核心配置文件交换缓冲区使用了无效操作