越过矢量(分段故障)

d2B*_*amp 2 c++ vector std fault

我觉得迭代器有问题,但我不明白为什么!你能告诉我更多信息吗?

我有以下电影课:

public:
    vector<string> casting() const;

private:
    string _titol;
    short _year;
    vector<string> _alies;
    string _director;
    vector<string> _casting;
Run Code Online (Sandbox Code Playgroud)

casting()方法只返回_casting向量

我有我的main.cpp,我打电话:

void Movies::actorMovies(string actor){
bool existeix = false;
std::map<titleyear,Movie>::iterator it = _pelis.begin();
std::vector<string>::iterator it2;

for(it; it!=_pelis.end(); it++){
    for(it2=it->second.casting().begin(); it2!=it->second.casting().end(); it2++){
        /*if((*it2).compare(actor)==0){
            cout<<"Titol: "<<it->first.t<<endl<<"Any: "<<it->first.y<<endl;
            existeix = true;
        }*/
    }


}
if(!existeix) 
    cout<<"NOT FOUND"<<endl;
}
Run Code Online (Sandbox Code Playgroud)

当我想要取消注释if语句时,会出现Segmentation故障.有人能看到这里发生了什么吗?

Ker*_* SB 5

你的前提是错的.该casting()方法返回一个新的副本中的_casting每一个被调用时,向量.因此it2它永远不会相等it->second.casting().end(),因为它是一个完全不同的容器的迭代器!

事实上,it2在完整表达式结束时立即失效,因为它是一个立即死亡的临时容器的迭代器.

如果casting()要提供实际_casting向量的视图,则应返回左值:

const std::vector<std::string> & casting() const { return _casting; }
//                            ^^^
Run Code Online (Sandbox Code Playgroud)