Vector::擦除分段故障

Vector:: erase segmentation fault

本文关键字:故障 分段 擦除 Vector      更新时间:2023-10-16

我在这段代码中出现了分段错误,我无法了解原因:

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个点之间的欧氏距离的函数。基本上,我会做一些类似"如果两个点离得太近,删除其中一个"的事情。但我有分段错误。知道吗?

erase行错误。你有j * 3,而你的意思可能是j + 3

vector <double> *point;

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

因此,未定义的行为&撞车事故。

我会选择一个简单的对象,而不是

vector <double> point;

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

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