簡體   English   中英

C++中向量的分割錯誤

[英]Segmentation error in vectors in C++

我有一個名為cpatches的向量,它不為空,並且至少包含一個對象cv::Point3i(0,0,0) 下面是我的代碼,它給出了分段錯誤。 代碼運行良好,直到它到達r2 = objects.front().y ,然后給出分段錯誤並中止代碼。

我正在嘗試將由cv::Point3i(0,0,0)分隔的對象分隔為另一個名為objects向量。 在排序中, compare_rowcompare_col ,工作得很好。 (它分別返回ay > byaz > bz

代碼如下。

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()) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM