C++:为什么取消引用这个向量迭代器会出错

C++: Why does dereferencing this vector iterator segfault?

本文关键字:向量 迭代器 出错 为什么 取消 引用 C++      更新时间:2023-10-16
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 foundn"; // ****
    strings.insert(it,s);
}

尝试使用此功能时,第一次插入正常。第二次插入将输出"找到 [第一个字符串]",然后输出段错误。如果我注释掉 if/cout 行,我可以反复调用并且不会发生段错误。

我也尝试过做一些类似std::string tmp=*it;的事情,然后它会在该行上出现段错误。虽然打印没什么大不了的,但我真正想做的是检查lower_bound找到的位置的字符串是否与尝试插入的字符串相同(即if(*it==s),就像上面的两个例子一样是分段错误(。

我在这里错过了什么?

谢谢!

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