2011-11-30 1 views
4

Linux 우분투의 opencv에서 다음 코드를 작업하고 있습니다. x_captured 및 y_captured는 "int"유형 벡터입니다. 두 벡터의 크기는 18std :: out_of_range 오류

for (int i=0;i<=x_captured.size();i++) 
{ 
    for (int j=0;j<=y_captured.size();j++) 
    { 
     if (i!=j) 
     { 
      if (((x_captured.at(j)-x_captured.at(i))<=2) && 
       ((y_captured.at(j)-y_captured.at(i))<=2)) 
      { 
       consecutive=consecutive+1; 
      } 
     } 
    } 
} 

되지만 때 = 0, J = (18)는 다음과 같은 오류가 발생하는 것이 후 :

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

답변

4
for (int i=0;i<=x_captured.size();i++) 
     { 
      for (int j=0;j<=y_captured.size();j++) 

당신은 <=<에를 변경하고 다시 시도해야합니다.

enter image description here

예 배열 빌리라는 이름 : 크기 : 5하지만 마지막 인덱스 4. 그것을 얻을입니까? :)

+4

Juan Soulié (출처 : [Complete C++ Tutorial]) (http://www.cplusplus.com/doc/tutorial/arrays/) (출처 : (http://www.cplusplus.com/files/tutorial.pdf)) – sehe

+0

@sehe 하하 잘 검색 한 첫 번째 장소였습니다. :) – FailedDev

5

문제는 0부터 N까지 반복 사용한다는 것이다을 유효한 인덱스가 0에서 N - 1 일 때 마지막 반복에서 예외가 발생합니다. std::vector::at은 바운드 검사를 수행하고 범위를 벗어난 경우 std::out_of_range이 발생합니다.

루프의 상태를 <이 아닌 <=으로 변경해야합니다.

for (int i = 0; i < x_captured.size(); i++) 
{ 
    for (int j = 0; j < y_captured.size(); j++) 
    { 
     ... 
    } 
}