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

4 に答える 4

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

下線部がコンディションです。この場合、「のサイズimageCornersが "false" (つまり0) になるまでループし続ける」と言っています。ただし、ベクトルのサイズを変更することは決してないため、i実際には にないインデックスにアクセスしようとするまで、この条件によってループが停止することはなく、大きくなり続けますimageCorners

iおそらく、ベクトルよりも大きくなるまでループするつもりです。次に使用します

for (int i=0; i < imageCorners.size(); ++i) {
于 2013-08-05T09:44:56.573 に答える
0
for ( int i = 0 ; imageCorners.size();i++)

imageCorners.size() が 0 以外の場合、このループは永遠に実行されると思います。

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

実行されると、ある時点iで範囲外になり、プログラムがクラッシュします。

于 2013-08-05T09:48:25.930 に答える