我有一个包含对象的向量,并且我想删除一些特殊的对象,并且我的程序在我的“ delete(* iter)”行中崩溃,并显示消息“ Process完成退出代码0”,并且我没有任何内容知道为什么
void killHero(Hero* hero,vector<Hero*>& players)
{
std::vector<Hero*> ::iterator iter;
int count = 0;
for(iter=players.begin(); iter!=players.end();++iter) {
Hero *h = *iter;
if (h->getName() == hero->getName()) {
delete *iter;
players.erase(iter);
vecorSize--;
}
}
}
我的载体包含:
void createNewGame(vector<Hero*> &players,int warriors, int thieves, int necromancers)
{
string nameOfwarrior="";
for(int i=0; i<warriors; i++)
{
cout << "Please insert warrior number "<< i+1 << " name:"<<endl;
std::getline(cin,nameOfwarrior);
try
{
digitCheck(nameOfwarrior);
Warrior *warr = new Warrior(nameOfwarrior);
players.push_back(warr);
}
catch(GameException& e )
{
e.error();
i--;
}
}
for(int i=0; i<thieves; i++)
{
cout << "Please insert thief number "<< i+1 << " name:"<<endl;
std::getline(cin,nameOfwarrior);
try
{
digitCheck(nameOfwarrior);
Thief* thief = new Thief(nameOfwarrior);
players.push_back(thief);
}
catch(GameException& e)
{
e.error();
i--;
}
}
for(int i=0; i<necromancers; i++)
{
cout << "Please insert necromancer number "<< i+1 << " name:"<<endl;
std::getline(cin,nameOfwarrior);
try
{
digitCheck(nameOfwarrior);
Necromancer* necro = new Necromancer(nameOfwarrior);
players.push_back(necro);
}
catch(GameException& e)
{
e.error();
i--;
}
}
}
什么可以解决问题? 谢谢
答案 0 :(得分:3)
players.erase(iter)
操作使iter
无效。迭代之后,将执行++iter
,在下一次迭代*iter
中,由于迭代器无效,两者都具有未定义的行为。
您必须使用以下算法:
erase
将迭代器返回到下一个元素。