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

Why my program crash after dereference of returned iterator of erase() function?

下面是我的代码。我擦除值为 3 的元素并通过 erase() 函数获取下一个迭代器。但是当我试图打印它时 value.It 出乎我的意料。有人知道这个问题吗??

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;
    }

Why my program crash after dereference of returned iterator of erase() function?

在间接通过该迭代器并将其插入 cout 后,您继续递增 it(可能)无效,然后将其与另一个迭代器进行比较,然后间接通过它。这会导致未定义的行为。

甚至在此之前,在 *it != 3 的情况下,您通过未初始化的 g 间接访问,这会导致未定义的行为。