我有一个Point
向量的向量(称为squares
,由findSquares()
squares.cpp
(OpenCV)函数返回。
我想在Point的矢量(用c ++语言)中存储四个点的x和y坐标的平均值。
我试着这样做:
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矢量向量的元素?
答案 0 :(得分:2)
请注意以下代码:
if (squares.size() !=0){
for( int j=0; j<4; j++) {
coordinates[j].x /= squares.size();
coordinates[j].y /= squares.size();
}
}
当coordinates[j].x
大于0但小于4时,此代码块可能会在squares.size()
时崩溃。
想象一下,squares.size()
是2.当for
变为2时,您认为在j
循环中会发生什么?除法将变为coordinates[2].x /= squares.size();
,它试图访问向量中不存在的位置,从而导致崩溃。 记住:如果数组的大小为2,则向量的有效索引为0和1,因此2超出范围。
这是您的代码中的问题,可能是造成崩溃的原因。要修复它,请将循环更新为:
for (int j = 0; j < squares.size(); j++) {
如果崩溃继续发生,则问题出在代码中的其他位置。