为什么我的程序在取消引用 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
间接访问,这会导致未定义的行为。
下面是我的代码。我擦除值为 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
间接访问,这会导致未定义的行为。