首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这段代码在哪里引用了一个无效的迭代器?(C++)

这段代码在哪里引用了一个无效的迭代器?(C++)
EN

Stack Overflow用户
提问于 2009-05-16 03:04:58
回答 2查看 635关注 0票数 3

我有一个循环

代码语言:javascript
复制
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()语句为真,我不知道会发生什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-16 03:11:52

向量的大小是多少?

如果viral_data的元素比antiviral_data多,那么由于您以相同的速度递增aI和vI,aI将在vI循环结束之前越界。

下面是一个简短的例子:

代码语言:javascript
复制
for(int i = 0; i < 5;)
{
    for(int j = 0; j < 10;)
    {
        i++;
        j++;
    }
}

如果你遍历for循环,你会注意到内部循环直到ji都是10才结束,但是根据你的外部循环,i不应该大于5。

您需要在外部循环中递增i(在本例中为aI),如下所示:

代码语言:javascript
复制
for(int i = 0; i < 5;)
{
    for(int j = 0; j < 10;)
    {
        j++;
    }
    i++;
}
票数 8
EN

Stack Overflow用户

发布于 2010-02-01 22:29:15

取消引用发生在

代码语言:javascript
复制
((*aI)->x == (*vI)->x && (*aI)->y == (*vI)->y)

当该语句对于antiviral_data列表中的最后一个元素为真时,就会发生这种情况。在这种情况下,在内部for循环的下一次迭代中,您将取消对antiviral_data.end()的引用,这是不允许的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/871579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档