我有一个名为cpatches
的向量,它不为空,至少包含一个对象cv::Point3i(0,0,0)
。下面是我的代码,它给出了分段错误。代码工作得很好,直到它到达行r2 = objects.front().y
,然后给出分割错误并中止代码。
我正在尝试将被cv::Point3i(0,0,0)
分隔的对象分离到另一个名为 objects
的向量。在排序中,compare_row
和compare_col
,工作得很好。(它分别返回a.y > b.y
和a.z > b.z
)
代码如下。
for (int i = 0; i < cpatches.size(); i++) {
cv::Point3i npoint = cpatches[i];
std::vector<cv::Point3i> objects;
std::cout << npoint << std::endl;
if (npoint.x != 1 && npoint.y != 1 && npoint.z != 1) {
objects.push_back(npoint);
} else {
std::sort(objects.begin(), objects.end(), compare_row);
int r1, r2, c1, c2;
r2 = objects.front().y;
r1 = objects.back().y;
std::sort(objects.begin(), objects.end(), compare_col);
c2 = objects.front().y;
c1 = objects.back().y;
cv::rectangle(display_obstacles, cv::Point(r1, c1), cv::Point(r2, c2), CV_RGB(0, 255, 0));
std::cout << "hhh" << r1 << ", " << c1 << "; " << r2 << ", " << c2 << "; ";
objects.clear();
}
}
你能帮我确定在调用向量的第一个和最后一个元素时犯了什么错误吗?
如果一个vector
实例是空的,那么它对我们来说是未定义的行为,无论是它的front()
方法还是back()
方法(两者都假设至少存在一个元素)。这几乎可以肯定是导致您的问题的原因。
元素被推送到objects
之前命中您的else
子句。防止这种情况的一种简单方法是更改行:
} else {
自
} else if (!objects.empty()) {