我有一个循环
for(aI = antiviral_data.begin(); aI != antiviral_data.end();)
{
for(vI = viral_data.begin(); vI != viral_data.end();)
{
if((*aI)->x == (*vI)->x && (*aI)->y == (*vI)->y)
{
vI = viral_data.erase(vI);
aI = antiviral_data.erase(aI);
}
else
{
vI++;
aI++;
}
}
}但是,每当antiviral_data包含一个项时,我就会得到一个错误"vector iterator not dereferencable“。为什么我会得到这个错误,我在哪里引用了一个无效的迭代器?
注意:到目前为止,只有当if()语句为false时,才会出现这个错误。如果if()语句为真,我不知道会发生什么。
发布于 2009-05-16 03:11:52
向量的大小是多少?
如果viral_data的元素比antiviral_data多,那么由于您以相同的速度递增aI和vI,aI将在vI循环结束之前越界。
下面是一个简短的例子:
for(int i = 0; i < 5;)
{
for(int j = 0; j < 10;)
{
i++;
j++;
}
}如果你遍历for循环,你会注意到内部循环直到j和i都是10才结束,但是根据你的外部循环,i不应该大于5。
您需要在外部循环中递增i(在本例中为aI),如下所示:
for(int i = 0; i < 5;)
{
for(int j = 0; j < 10;)
{
j++;
}
i++;
}发布于 2010-02-01 22:29:15
取消引用发生在
((*aI)->x == (*vI)->x && (*aI)->y == (*vI)->y)当该语句对于antiviral_data列表中的最后一个元素为真时,就会发生这种情况。在这种情况下,在内部for循环的下一次迭代中,您将取消对antiviral_data.end()的引用,这是不允许的。
https://stackoverflow.com/questions/871579
复制相似问题