C++ 向量::擦除分段错误
我在这段代码中遇到了一个分段错误,我不知道为什么:C++ 向量::擦除分段错误,c++,vector,segmentation-fault,erase,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],(*poi
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;
}
}
}
矢量*点;
对于(int i=0;isize();i+=3){
对于(int j=i+3;jsize();j+=3){
如果(距离((*点)[i],(*点)[i+1],(*点)[i+2],(*点)[j],(*点)[j+1],(*点)[j+2])擦除(点->开始()+j,点->开始()+j*3);
j-=3;
}
}
}
点是点的坐标向量,类似于(x1,y1,z1,x2,y2,z3,…,xn,yn,zn)。
距离这是一个函数,计算给定6坐标的2个点之间的欧几里德距离。
基本上,我会做的是“如果两个点彼此太近,请删除其中一个”。
但我有错。
有什么想法吗
或者,如果必须使用动态内存:
vector <double> *point = new vector<double>;
矢量*点=新矢量;
或者,如果必须使用动态内存:
vector <double> *point = new vector<double>;
矢量*点=新矢量;
删除行错误。当您可能是指j+3
时,您有j*3
,擦除
行是错误的。你有j*3
当你可能是指j+3
不,点
不是向量,它是指向向量的指针。它指向什么?在这个代码中,分段错误到底发生在哪里?为什么每个系列的3个都被认为是一个点?为什么没有一个坐标的向量
,每个坐标
可以容纳3个doublt?对不起,我的错。指向向量的指针已经初始化,这只是我代码的一个摘录。事实上,如果我在这个循环之前做了这个大小的cout,它就工作了。我之所以使用double向量而不是坐标向量,是因为我使用的库需要double向量。不,point
不是向量,它是指向向量的指针。它指向什么?在这个代码中,分段错误到底发生在哪里?为什么每个系列的3个都被认为是一个点?为什么没有一个坐标的向量
,每个坐标
可以容纳3个doublt?对不起,我的错。指向向量的指针已经初始化,这只是我代码的一个摘录。事实上,如果我在这个循环之前做了这个大小的cout,它就工作了。我之所以使用double向量而不是坐标向量,是因为我使用的库需要double向量。我假设它已经初始化了,或者他可能已经注意到了,布兰登的答案才是真正的问题。@Moingduck我承认我没看那么远:)我假设它实际上已经初始化,或者他可能已经注意到了,布兰登的答案才是真正的问题。@Moingduck我承认我没看那么远:)
vector <double> *point = new vector<double>;