outofrangeexception — ‘std :: out_of_range’

Хотя я обернул код 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(); ....

-2

Решение

std::out_of_range брошен std::vector::at если индекс выходит за пределы допустимых значений (то есть [0..size-1]).

Попробуйте обернуть строки, вызывающие эту функцию: try/catch блоки и посмотреть, какой из них бросает. Затем запустите ваш отладчик и выясните, почему индекс выходит за пределы допустимого диапазона.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]