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);
}
この機能を使用しようとすると、最初の挿入がうまくなります。 2番目の挿入は "[firststring]が見つかりました"と出力し、segfaultを出力します。 if/cout行をコメントアウトすると、繰り返し呼び出すことができ、segfaultは発生しません。C++:なぜこのベクトルイテレータsegfaultを逆参照していますか?
私はまたstd::string tmp=*it;
のようなことをやってみましたが、その行でsegfaultします。印刷は大したことではありませんが、私が実際にやっていることは、lower_boundで見つかった位置の文字列が挿入しようとしている文字列と同じかどうかを確認することです(つまり、if(*it==s)
、 2つの例)。
私はここで何が欠けていますか?
ありがとうございます!
確かに 'if(it!= strings.end())std :: cout << * it <<"が見つかりました\ n ";'? – Flexo
申し訳ありませんが、「見つかりました」という単語を使用してはいけません。イテレータが最後に終わった値を印刷したいだけで、文字列 's'が実際にこのベクトルで見つかったことを暗示しようとしません(これは最終的に私がやりたいことですが)。 – Joseph