为什么我的程序在取消引用 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 未初始化,从而导致未定义的行为。