2013-08-05 106 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会出界和程序会崩溃。