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故障.有人能看到这里发生了什么吗?
你的前提是错的.该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)
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |