微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的程序在取消引用 erase() 函数的返回迭代器后崩溃?

如何解决为什么我的程序在取消引用 erase() 函数的返回迭代器后崩溃?

下面是我的代码。我擦除值为 3 的元素并通过擦除()函数获取一个迭代器。但是当我试图打印它的值时,它突然崩溃了。有人知道问题吗??

int main()
{
    std::vector<int> a = {1,2,3,4,5}; 
    for(vector<int> ::iterator it=a.begin();it!=a.end();it++)
    {
        vector<int> ::iterator g;
        if(*it==3 )
        {
            g=a.erase(it);
        }
        cout<<*g<<endl;
    }

解决方法

为什么我的程序在对返回的erase() 函数的迭代器取消引用后崩溃?

通过该迭代器进行间接访问并将其插入到 hdr_filenames = [ "20210311_105300_HDR.jpg","20210311_105306_HDR.jpg","20210311_105310_HDR.jpg","20210311_105314_HDR.jpg","20210311_105341_HDR.jpg",# order of last two have reversed exposures "20210311_105323_HDR.jpg" ] 后,您继续增加(可能)无效的 cout,然后将其与另一个迭代器进行比较,然后通过它间接进行比较。这会导致未定义的行为。

甚至在此之前,在 it 的情况下,您通过 *it != 3 进行间接调用,该 g 未初始化,从而导致未定义的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。