[英]why this program is crashing
我编写了一个小程序,其中我想基于矢量将帧的值设置为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
for ( int i = 0 ; imageCorners.size();i++){
// ^^^^^^^^^^^^^^^^^^^
下划线部分是条件 。 在这种情况下,您说的是“一直循环播放,直到imageCorners
的大小为” false”(即0
)为止。 但是,您永远不会更改向量的大小,因此这种情况永远不会停止循环, i
会不断增大,直到您尝试访问imageCorners
实际上不存在的索引。
大概你想循环直到i
变得比矢量大。 然后使用
for (int i=0; i < imageCorners.size(); ++i) {
这对我来说似乎很狡猾:
for ( int i = 0 ; imageCorners.size();i++){
您肯定想写类似的东西:
for ( int i = 0 ; i < imageCorners.size();i++){
循环的条件imageCorners.size()
仅产生容器中存储的元素数。 一旦将一个元素放入imageCorners
该语句将始终评估为true
。 您想要的是i < imageCorners.size()
。
for ( int i = 0 ; imageCorners.size();i++)
我认为,如果imageCorners.size()不同于0,则此循环将永远运行。
std::cout << imageCorners[i]<< std::endl;
被执行,在某些时候i
将超出范围,程序将崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.