如何解决为什么我的程序在取消引用 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 举报,一经查实,本站将立刻删除。