繁体   English   中英

为什么这个程序崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM