我在这段代码中出现了分段错误,我无法了解原因:
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>;