STL裡面出現這個問題,糾結了半天,不知道什麼原因。
當然deque iterator not dereferencable。這個是deque出問題,vector、list也可以出問題的。也有很多人提問,但是回答的人很少。
最後還是找到一些答案了。
出現這種情況有兩種可能。
第一:訪問某一個不存在的位置。
比如:
[cpp]
#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()沒有元素訪問了 ,倒置出現這種錯誤。
所以:訪問前一定要判斷是否存在。 www.2cto.com
第二:在多線程編程裡面,這種問題也出現的比較多。
兩個線程同時訪問同一個容器,也會導致出現這種情況。
解決辦法:關鍵代碼段。
不建議用互斥內核對象是因為關鍵代碼段是用戶層的,調用很快,互斥內核對象調用需要從用戶態轉入內核態!時間很長!