std::list<myclass*>::迭代器比较的异常行为
Unusual behaviour with std::list<myclass*>::iterator comparison
当我比较两个迭代器时,我看到了一些不寻常的行为。
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
的票。你能在你的方法中添加一个检查来检测这种情况吗?
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 处理多个异常集合的C++方法
- 为什么比较运算符如此快速
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- std::out_of_range字符串比较中的异常
- 基于对象的两个属性的自定义比较器会引发异常
- 如何将std :: System_error异常与std :: errc值进行比较.据我了解,
- 启用优化时的堆栈指针比较异常
- 使用std::sort比较器函数时出现异常错误
- std::list<myclass*>::迭代器比较的异常行为
- 比较 (int)double 和 (int)int 时出现异常
- 比较 (int)double 和 (int)int 时出现异常