比较两个迭代器时,我看到一些异常行为。

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都等于0xcdcdcdcd。奇怪的是,当我进入!=比较运算符时,“ this”指针变为0xcdcdcdcd。 0xcdcdcdcd不应该是迭代器中存储的值,而不是迭代器本身的地址吗?还是有某种迭代器黑魔法,其中迭代器既存储值又是值?这是一个较大项目的一部分,但该错误是可重复的。

预先感谢您的任何帮助!

最佳答案

让我们遵循逻辑链(假设您的for循环的前几行完全如所述):


itCurrent->this == 0xcdcdcdcd,因此...
itCurrent == 0xcdcdcdcd,因此...
vlWatchers[i].begin()返回了0xcdcdcdcd,因此...
vlWatchers[i]无效,因此也许...

i >= vlWatches.size(),或
vlWatchers无效



我以某种方式投票给vlWatchers.size() == 0。您可以在方法中添加检查以检测这种情况吗?

10-08 09:44