根据valgrind,此问题是由以下代码引起的。我想删除列表中的元素,该元素包含与ref相同的整数值。
while(itr1!=list1.end())
{
if(itr1->num==ref)
{
list1.erase(itr1);
}
else
{itr1++;}
}
list1是一个STL列表,列表元素的类型是NODE,这是一个结构。 num是NODE中的整数元素之一。 itr1是list1的迭代器。 ref是一个整数值。
但是在我替换下面的代码后,这是正确的
for(;itr1!=list1.end();itr1++)
{
if(itr1->num==ref)
{
list1.erase(itr1);
itr1--;
}
}
我真的看不到两个片段之间的区别。
我不知道您是否可以找出代码不完整的问题。如果需要,我可以发布所有程序。谢谢!
最佳答案
在erase
之后,删除的元素的迭代器无效。第二个代码是由于运气而工作的,尽管这是未定义的行为,并且应将其视为 buggy 。
关于c++ - 为什么两个程序之一会导致 “*** glibc detected *** double free or corruption”错误,而另一个则不会呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17252534/