矢量::擦除分段故障

时间:2012-09-05 15:44:57

标签: c++ vector segmentation-fault erase

我在这段代码中遇到了分段错误,我无法理解:

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;
        }
    }
}

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

2 个答案:

答案 0 :(得分:4)

vector <double> *point;

声明一个未初始化的指针,您尝试使用point->size()进行访问。

因此,未定义的行为&amp;崩溃。

我会选择一个简单的对象

vector <double> point;

如果必须使用动态内存:

vector <double> *point = new vector<double>;

答案 1 :(得分:4)

erase行错了。如果您的意思是j * 3,则可以j + 3