我写了一个小程序,其中,我想根据向量将帧的值设置为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
答案 0 :(得分:4)
for ( int i = 0 ; imageCorners.size();i++){
// ^^^^^^^^^^^^^^^^^^^
带下划线的部分是条件。在这种情况下,您说“保持循环直到imageCorners
的大小为”false“(即0
)”。但是你永远不会改变向量的大小,所以这个条件永远不会停止循环,i
会不断变大,直到你试图访问一个实际上不在imageCorners
的索引。
据推测,你的意思是循环直到i
大于向量。然后使用
for (int i=0; i < imageCorners.size(); ++i) {
答案 1 :(得分:3)
这看起来很狡猾:
for ( int i = 0 ; imageCorners.size();i++){
你肯定想写下这样的东西:
for ( int i = 0 ; i < imageCorners.size();i++){
答案 2 :(得分:1)
循环的条件imageCorners.size()
仅产生容器中存储的元素数。只要将一个元素放入true
,该语句将始终评估为imageCorners
。你想要的是i < imageCorners.size()
。
答案 3 :(得分:0)
for ( int i = 0 ; imageCorners.size();i++)
我认为如果imageCorners.size()不同于0,这个循环将永远运行。所以当这个
std::cout << imageCorners[i]<< std::endl;
执行,某些时候i
将超出界限,程序将崩溃。