2011-11-30 201 views
4

我正在研究Linux Ubuntu中opencv中的以下代碼。 x_captured和y_captured是「int」型向量。兩個矢量的大小爲18。std :: 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; 
      } 
     } 
    } 
} 

但是當i = 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

請注意你的消息來源:[「完整的C++教程」](http://www.cplusplus.com/doc/tutorial/arrays/)(點擊查看更多!)JuanSoulié(download [as PDF] (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++) 
    { 
     ... 
    } 
} 
相關問題