C++:为什么解除引用此向量迭代器段错误?

Jos*_*eph 2 c++ pointers iterator stl segmentation-fault

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);
}
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过做类似的事情std::string tmp=*it;,然后在那条线上进行段错误.虽然打印不是很大,但我真正要做的是检查lower_bound找到的位置处的字符串是否与尝试插入的字符串相同(即,if(*it==s)就像上面的那样是segfaulting两个例子).

我在这里错过了什么?

谢谢!

Vit*_*con 6

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