2013-08-05 105 views
0

我寫了一個小程序,在其中,我想設置一個幀255的基於矢量的值:爲什麼這個程序崩潰

result = cv::Mat::zeros(frame.size(),CV_8UC1); 
std::vector<cv::Point2f> imageCorners; 
....................................................... 
    for (int i = 0 ; imageCorners.size();i++){ 
       std::cout << imageCorners[i]<< std::endl; 
       result.at<uchar>(imageCorners[i]) = 255; 
       cv::imshow("result",result); 
      } 

我的問題是:爲什麼在節目剛辦完後崩潰循環?即使我看到結果是正確的?我得到的錯誤信息是:

vector subscript out of range 

回答

4
for (int i = 0 ; imageCorners.size();i++){ 
//    ^^^^^^^^^^^^^^^^^^^ 

下劃線部分是條件。在這種情況下,你說「保持循環,直到imageCorners的大小爲」假「(即0)」。但是你永遠不會改變向量的大小,所以這個條件永遠不會停止循環,i繼續變大,直到你嘗試訪問實際上不在imageCorners中的索引。

假設你的意思是循環直到i變得比矢量更大。然後使用

for (int i=0; i < imageCorners.size(); ++i) { 
+0

哦,男孩我很抱歉不注意 – Engine

+0

@Engine沒關係,發生在每個人身上。 – BoBTFish

+0

我想接受你的回答,但我得等10分鐘 – Engine

3

這看起來狡猾的對我說:

for (int i = 0 ; imageCorners.size();i++){ 

你一定想寫類似:

for (int i = 0 ; i < imageCorners.size();i++){ 
1

你的循環狀況,imageCorners.size()僅產生元素的數量存儲在容器中。只要您將一個元素放入imageCorners,該聲明將始終評估爲true。你想要的是i < imageCorners.size()

0
for (int i = 0 ; imageCorners.size();i++) 

我覺得這個循環將永遠運行下去,如果imageCorners.size()大於0的不同所以,當這

std::cout << imageCorners[i]<< std::endl; 

得到執行,在某些時候i會出界和程序會崩潰。