deque iterator not dereferencable 问题

来源:互联网 发布:阿里云cdn刷新缓存url 编辑:程序博客网 时间:2024/04/27 18:41

STL里面出现这个问题,纠结了半天,不知道什么原因。

当然deque iterator not dereferencable。这个是deque出问题,vector、list也可以出问题的。也有很多人提问,但是回答的人很少。

最后还是找到一些答案了。

出现这种情况有两种可能。

第一:访问某一个不存在的位置。

比如:

#include<iostream>#include <queue> using namespace std;int main(){queue<int> x;for(int i = 0;i < 10;i++){x.push(i+1);}while(!x.empty()){cout << x.front() << " ";x.pop();x.push(x.front());x.pop();}cout << endl;return 0;}

这个例子在百度上面找到的,由于x.front()没有元素访问了 ,倒置出现这种错误。

所以:访问前一定要判断是否存在。



第二:在多线程编程里面,这种问题也出现的比较多。

两个线程同时访问同一个容器,也会导致出现这种情况。

解决办法:关键代码段。

不建议用互斥内核对象是因为关键代码段是用户层的,调用很快,互斥内核对象调用需要从用户态转入内核态!时间很长!



原创粉丝点击