比较两个迭代器时,我看到一些异常行为。
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
。您可以在方法中添加检查以检测这种情况吗?