我有一个程序维护一个整数向量。我有三个函数添加一个整数,删除一个整数,并检查一个整数是否已经在向量中。问题在于最后一个。迭代通过矢量时出现C++分段错误
vector<int> children;
void CtpTestingApplication::addChild(int child)
{
for (int i=0; i<children.size(); i++)
{
//already a child
if (children[i]==child)
return;
}
//child not yet recorded
children.push_back(child);
cout<<"added child "<<child;
}
void CtpTestingApplication::removeChild(int child)
{
for (int i=0; i<children.size(); i++)
{
//already a child, remove it
if (children[i]==child)
{
children.erase(children.begin()+i);
cout<<"removed child "<<child;
}
}
//not recorded, no need to remove
}
bool CtpTestingApplication::isChild(int child)
{
vector<int>::iterator ic;
bool result = false;
for (ic= children.begin(); ic < children.end(); ic++)
{
cout<<*ic<<" vs "<<child;
// if (child==*ic)
result = true;
}
return result;
}
我总是得到段错误当我去掉“如果(孩子== * IC)”,即使打印输出显示,向量不为空,并且包含预期的整数。
例如,与if语句评论的,我可以看到 1比4, 2比4, 4对4, 12对4
我还试图利用儿童[i]和如此循环上,但无济于事。任何帮助,将不胜感激。谢谢。
你能否提供一个表现这种行为的最小化_compilable_示例程序?给定的代码中没有任何内容会导致分段错误。 – Mankarse
你的removeChild()方法有“问题” - 一旦你做了删除操作,它会“左移”所有成员以“填补空白”,所以你不会真正检查下一个成员。这只是一个问题,如果你可以有重复。如果你不能,那么为什么不在你找到一场比赛后打破循环? – John3136
对不起,我希望我能。这是我正在慢慢编辑的一个巨大(工作)程序的一部分。我尽可能简化了这个问题,整个程序有十几个单独的文件,这些文件紧密结合在一起。 – user1790374