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

时间:2012-03-07 09:17:30

标签: c++ pointers stl iterator 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);
}

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

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

我在这里缺少什么?

谢谢!

1 个答案:

答案 0 :(得分:6)

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