当我比较两个迭代器时,我看到了一些不寻常的行为。
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迭代器在while()行上出现不兼容的错误,并且在i = 0时会出现,尽管只是部分时间。
在调用错误后进一步调查,itEnd和itCurrent都等于0xcdcdcdcd。奇怪的是当我进入!=比较运算符时,“this”指针变为0xcdcdcdcd。 0xcdcdcdcd不应该是存储在迭代器中的值,而不是迭代器本身的地址吗?或者是否有某种迭代器黑魔法,其中迭代器都存储一个值而IS是值?这是较大项目的一部分,但错误是可重复的。
提前感谢您的帮助!
答案 0 :(得分:0)
让我们遵循逻辑链(假设您的for
循环的前几行完全如上所述):
itCurrent->this == 0xcdcdcdcd
,因此...... itCurrent == 0xcdcdcdcd
,因此...... vlWatchers[i].begin()
返回0xcdcdcdcd
,因此...... vlWatchers[i]
无效,因此也许......
i >= vlWatches.size()
或vlWatchers
无效我以某种方式投票给vlWatchers.size() == 0
。您可以在方法中添加检查以检测该情况吗?