-2

プログラムのすべての部分に try コードをラップしましたが、実行時エラーの原因となっている行を取得できません (その他の詳細なし)。

"terminate called after throwing an instance of 'std::out_of_range'
what():  vector::_M_range_check Aborted"

そして、私は何をすべきかわかりません。これらの行を追加した後に表示されるため、エラーは次のコードによって引き起こされます。

.....
map<int, StaticObject*>::iterator mapPos2;
vector<StaticObject*, boost::pool_allocator<StaticObject*> >::iterator vecPos;

map<int, int>::iterator mapPos = userCountMap.begin();  

mapPos2 = this->_cachedObjects.find(this->_lruQueue.at(mapPos->first)->getId());                   
vecPos = find(this->_lruQueue.begin(),this->_lruQueue.end(), this->_lruQueue.at(mapPos->first));

size -= this->_lruQueue.at(mapPos->first)->getSize();  
_availableSpace += this->_lruQueue.at(mapPos->first)->getSize(); 

delete (*mapPos2).second;   

this->_cachedObjects.erase(mapPos2); 
this->_lruQueue.erase(vecPos);  
............

そして後で:

map<int, int> userCountMap;

userCountMap.insert(make_pair(object->getId(),1)); ...
this->userCountMap[id]++; ...
this->userCountMap.clear(); ....
4

1 に答える 1

2

std::out_of_rangestd::vector::atインデックスが有効な値 (つまり、) の範囲外の場合、によってスローされます[0..size-1]

その関数を呼び出す行をtry/catchブロックでラップしてみて、どれがスローされるかを確認してください。次に、デバッガーを起動して、インデックスが範囲外である理由を調べます。

于 2014-03-18T19:41:26.363 に答える