num==ref) -6ren">
gpt4 book ai didi

c++ - 为什么两个程序中的一个会导致 "*** glibc detected *** double free or corruption"错误而另一个不会?

转载 作者:行者123 更新时间:2023-11-30 01:21:58 25 4
gpt4 key购买 nike

根据valgrind,这个问题是由下面的代码引起的。我想删除列表中的元素,它包含与ref相同的整数值。

while(itr1!=list1.end())
{
if(itr1->num==ref)
{
list1.erase(itr1);
}
else
{itr1++;}
}

list1是一个STL列表,列表元素的类型是NODE,是一个structure。 num 是 NODE 中的整数元素之一。 itr1 是 list1 的迭代器。 ref 是一个整数值。


但是我用下面的代码替换后,是正确的

for(;itr1!=list1.end();itr1++)
{
if(itr1->num==ref)
{
list1.erase(itr1);
itr1--;
}
}

我真的看不出这两个片段之间的区别。

不知道大家能不能搞清楚代码不完整的问题。如果你需要,我可以发布所有程序。谢谢!

最佳答案

erase 之后,删除元素的迭代器将失效。第二个代码的工作是因为运气,尽管这是未定义的行为并且代码应该被认为是错误的。

关于c++ - 为什么两个程序中的一个会导致 "*** glibc detected *** double free or corruption"错误而另一个不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com