std::list<myclass*>::迭代器比较的异常行为

Unusual behaviour with std::list<myclass*>::iterator comparison

本文关键字:比较 异常 迭代器 list lt myclass std gt      更新时间:2023-10-16

当我比较两个迭代器时,我看到了一些不寻常的行为。

vector<list<MyClass*>>   vlWatchers(10);
list<MyClass*>::iterator itCurrent, itEnd;
for (int i(0); i <= 9; ++i)
{
    itCurrent = vlWatchers[i].begin();
    itEnd = vlWatchers[i].end();
    while (itCurrent != itEnd)
    {
        //code
    }
}

将在while()行上导致liste迭代器不兼容错误,并且在i=0时出现,尽管只是部分时间。

在调用错误后进行进一步调查时,itEnd和itCurrent都等于0xcdcdcd。奇怪的是当我踏入compare运算符,"this"指针BECOMES 0xcdcdcdcd。0xcdcdcd不应该是存储在迭代器中的,而不是迭代器本身的地址吗?或者是否存在某种迭代器的黑魔法,迭代器既存储值,又存储值?这是一个较大项目的一部分,但错误是可重复的。

提前感谢您的帮助!

让我们遵循逻辑链(假设for循环的前几行与描述完全相同):

  • itCurrent->this == 0xcdcdcdcd,因此
  • itCurrent == 0xcdcdcdcd,因此
  • vlWatchers[i].begin()返回0xcdcdcdcd,因此
  • vlWatchers[i]无效,因此可能。。。
    • i >= vlWatches.size(),或
    • vlWatchers无效

不知怎么的,我投了vlWatchers.size() == 0的票。你能在你的方法中添加一个检查来检测这种情况吗?