0

我有一个向量的向量Point(称为,由(OpenCV)的函数squares返回)。findSquares()squares.cpp

我想对存储在 Point 向量中的四个点的 x 和 y 坐标求平均值(用 c++ 语言)。

我试图这样做:

    vector <Point> coordinates(4);

    for ( int i = 0; i<squares.size();i++) {

        coordinates[0].x += squares[i][0].x;
        coordinates[0].y += squares[i][0].y;

        coordinates[1].x += squares[i][1].x;
        coordinates[1].y += squares[i][1].y;

        coordinates[2].x += squares[i][2].x;
        coordinates[2].y += squares[i][2].y;

        coordinates[3].x += squares[i][3].x;
        coordinates[3].y += squares[i][3].y;
    } 
    if(squares.size() !=0){
        for( int j=0; j<4; j++) {
            coordinates[j].x /= squares.size();
            coordinates[j].y /= squares.size();
        }
    }

但我得到了这个例外:

在此处输入图像描述

我以错误的方式读取 Point 向量的向量元素?

4

1 回答 1

2

注意以下代码:

if (squares.size() !=0){
    for( int j=0; j<4; j++) {
        coordinates[j].x /= squares.size();
        coordinates[j].y /= squares.size();
    }
}

此代码块可能在大于 0 但小于 4coordinates[j].x时崩溃。squares.size()

想象一下它squares.size()是 2。你认为当它变成 2时会在for循环中发生什么?j除法将变为coordinates[2].x /= squares.size();,它试图访问向量中不存在的位置,从而导致崩溃。请记住:如果数组的大小为 2,则向量的有效索引为 0 和 1,因此 2 超出范围。

这是您的代码中的一个问题,可能是导致崩溃的原因。要修复它,请将您的循环更新为:

    for (int j = 0; j < squares.size(); j++) {

如果崩溃继续发生,则问题出在代码中的其他地方。

于 2013-02-03T22:31:34.063 回答