繁体   English   中英

C ++:为什么取消引用此向量迭代器segfault?

[英]C++: Why does dereferencing this vector iterator segfault?

void insert_string( std::vector<std::string> & strings, const std::string &s )
{

    std::vector<std::string>::iterator it=lower_bound(strings.begin(),strings.end(),s);
    if(strings.size()>0) std::cout<<*it<<" is found\n"; // ****
    strings.insert(it,s);
}

尝试使用此功能时,第一次插入会很好。 第二个插入将输出“找到[firststring]”,然后输出段错误。 如果我注释掉if / cout行,则可以重复调用并且不会发生段错误。

我也尝试过做类似std::string tmp=*it; 然后将在该行上进行段错误。 虽然打印不是什么大问题,但我真正要做的是检查在Lower_bound找到的位置处的字符串是否与尝试插入的字符串相同(即if(*it==s) ,就像上面的两个示例一样,这是段错误。

我在这里想念什么?

谢谢!

检查条件是否it == strings.end() ,如果不打印则为条件。 这可能会导致问题。 您确定要检查的字符串在字符串向量中吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM