2014-03-18 2 views
-2

내가 (다른 세부 사항없이) 런타임 오류를 발생시키는 라인을 얻을 수없는 내 프로그램의 모든 부분 주위에 try 코드 포장 한 있지만 :C++ - '표준 : : out_of_range'

"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(); .... 
+0

-1 WTH는이 예외에서 불분명하고 그것이 던진 지점을 추적 (디버깅)합니까 ?? –

답변

2

std::out_of_range 인덱스가 범위를 벗어나면 std::vector::at에 의해 발생합니다 유효한 값 (즉, [0..size-1]).

해당 함수를 호출하는 행을 try/catch 블록으로 랩핑하고 어느 것이 던져 지는지 확인하십시오. 그런 다음 디버거를 시작하고 인덱스가 범위를 벗어나는 이유를 확인하십시오.