C++ 中向量中的分割误差



我有一个名为cpatches的向量,它不为空,至少包含一个对象cv::Point3i(0,0,0)。下面是我的代码,它给出了分段错误。代码工作得很好,直到它到达行r2 = objects.front().y,然后给出分割错误并中止代码。

我正在尝试将被cv::Point3i(0,0,0)分隔的对象分离到另一个名为 objects 的向量。在排序中,compare_rowcompare_col,工作得很好。(它分别返回a.y > b.ya.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()) {

相关内容

  • 没有找到相关文章

最新更新