C++ std::set integer insert上的Seg故障

C++ std::set integer insert上的Seg故障,c++,segmentation-fault,set,C++,Segmentation Fault,Set,我有一个函数,可以比较向量中的向量,如果它们相似,就合并它们。我必须记住已经合并的数组元素的索引,所以我将它们保存在队列中 在某些随机元素上,将索引插入队列会产生seg错误。我真的不明白为什么。这是我的密码: using namespace cv; using namespace std; //... //... unordered_set<uint> mergedIdxSet = unordered_set<uint>(); mergedIdxSet.reserve(r

我有一个函数,可以比较向量中的向量,如果它们相似,就合并它们。我必须记住已经合并的数组元素的索引,所以我将它们保存在队列中

在某些随机元素上,将索引插入队列会产生seg错误。我真的不明白为什么。这是我的密码:

using namespace cv;
using namespace std;
//...
//...
unordered_set<uint> mergedIdxSet = unordered_set<uint>();
mergedIdxSet.reserve(regions.size());
//...
//...
cout << "Test region " << r1 << " (" << regions[r1].size() << ") with...\n";
for(uint r2 = r1+1; r2 < regions.size(); r2++)
{
    if((bBoxes[r1] & bBoxes[r2]).area() == 0)
    {
        continue;
    }

    cout << "\tRegion " << r2 << "\n";

    Rect unionBound = bBoxes[r1] | bBoxes[r2];
    Point upperLeftBound = Point(unionBound.x, unionBound.y);
    Mat interMap = Mat::zeros(unionBound.size(), CV_8UC1);
    for(uint p = 0; p < regions[r1].size(); p++)
    {
        interMap.at<uchar>(regions[r1][p]-upperLeftBound) = 128;
    }
    for(uint p = 0; p < regions[r2].size(); p++)
    {
        interMap.at<uchar>(regions[r2][p]-upperLeftBound) += 127;
    }
    int intersectionArea = countNonZero(interMap);
    if(intersectionArea / regions[r1].size() >= ratio ||
       intersectionArea / regions[r2].size() >= ratio)
    {
        cout << "\t\tMerge\n";
        mergedIdxSet.insert(r2);
        for(uint i = 0; i < regions[r2].size(); i++)
        {
            pointSet.insert(regions[r2][i]);
        }
        regions[r1] = vector<Point>(pointSet.begin(), pointSet.end());
        cout << "New length: " << regions[r1].size() << "\n";
    }
}
该算法从区域0开始,合并区域1、2、3、4、5、6和8。然后它想要合并区域685,并在将变量r2中的无符号int 685添加到mergedIdxSet时崩溃。如果我只是跳过插入,它会在尝试将区域[r2]插入点集中时崩溃。如果我跳过685区域,它会在很久以后在其他区域崩溃。为什么会这样


提前感谢。

问题是我试图覆盖区域[r1]中的向量。不知何故,这导致整个程序在队列插入时崩溃。我通过删除非常相似的区域来替换合并过程,现在它可以工作了


谢谢您的输入。

您能分享堆栈跟踪吗?请发布一篇文章,以便我们知道您的代码中实际发生了什么。当您不明白哪里出了问题时,选择哪些部分足够重要以供共享不是一个好主意,因为问题很可能出在您假设正确的代码部分。我打赌在其中一个cv::Mats上进行越界访问。