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就像上面的两个例子一样)。
我在这里缺少什么?
谢谢!
答案 0 :(得分:6)
检查it == strings.end()
的条件,如果不打印则检查。{1}}。这可能会导致问题。你确定你要检查的字符串是否在字符串向量中?