gdb vector尝试获取不在内存中的地址

时间:2015-02-26 12:44:24

标签: c++ vector iterator gdb

我有一个向量vector<int> myvecotr。假设myvector={p1,p2,p3,p4},我需要阅读(p1, p2), (p2,p3),(p3,p4)

int t1,t2;
for(vector<int>::iterator it=myvector.begin(); it!=myvector.end();++it){
   t1=*it;
   t2=*(it+1);   // the question is here ?
}

当我使用gdb调试它时,

(gdb) p *(it+1)
(gdb) Attempt to take address not located in memory  

所以,我的问题是,为什么*(it+1)有时不起作用,但++it有效?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

这只是gdb bug,仅此而已。

答案 1 :(得分:2)

it位于最后一项时,即myvector.end()之前的项目,*(it+1)取消引用myvector.end()并且您不允许这样做。

++it没有取消引用迭代器。