1

我在这段代码中遇到了分段错误,我不明白为什么:

vector <double> *point;
for (int i = 0; i < point->size(); i += 3) {
    for (int j = i + 3; j < point->size(); j += 3) {
        if (distance((*point)[i], (*point)[i + 1],(*point)[i + 2], (*point)[j],(*point)[j + 1], (*point)[j + 2]) < treshold){
             point->erase(point->begin() + j, point->begin() + j * 3);
             j -= 3;
        }
    }
}

point 是点坐标的向量,类似于 (x1,y1,z1,x2,y2,z3,...,xn,yn,zn)。距离它是一个计算给定 6 坐标的 2 点之间的欧几里得距离的函数。基本上我会做的是“如果两点彼此太近,删除其中一个”。但我得到分段错误。任何的想法?

4

2 回答 2

4
vector <double> *point;

声明一个未初始化的指针,您尝试使用point->size().

因此,未定义的行为和崩溃。

我会选择一个简单的对象

vector <double> point;

或者,如果您必须使用动态内存:

vector <double> *point = new vector<double>;
于 2012-09-05T15:47:54.607 回答
4

erase线路错了。你有j * 3当你可能的意思j + 3

于 2012-09-05T16:08:54.123 回答