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] is found"를 출력 한 다음 segfault를 출력합니다. if/cout 행을 주석 처리하면 반복적으로 호출 할 수 있으며 segfault가 발생하지 않습니다.C++ : 왜이 벡터 반복자 segfault를 역 참조합니까?
나는 또한 std::string tmp=*it;
과 같은 것을 시도해 본 다음 그 줄에서 segfault를합니다. 프린팅이 큰 문제는 아니지만, 내가 정말로하려고하는 것은 lower_bound에 의해 발견 된 위치의 문자열이 삽입하려고하는 문자열과 같은지 확인하는 것입니다 (즉, if(*it==s)
, 이것은 segfaulting입니다. 두 가지 예).
무엇이 여기에 있습니까?
감사합니다.
확실하게'if (it! = strings.end()) std :: cout << * it << "가 발견되었습니다. \ n";'? – Flexo
죄송합니다. 나는 "found"라는 단어를 사용해서는 안됩니다. 이터레이터가 끝난 값이 무엇인지 인쇄하고 싶습니다. 문자열's'가 실제로이 벡터에서 발견된다는 것을 암시하지 않으려 고합니다. (궁극적으로 내가하고 싶은 것이지만). – Joseph