Vector :: стереть ошибку сегментации

Я получил ошибку сегментации в этом коде, и я не могу понять, почему:

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).
Расстояние — это функция, которая вычисляет евклидово расстояние между 2 точками с учетом 6 координат.
По сути, я бы сделал что-то вроде «если две точки расположены слишком близко друг к другу, удалите одну из них».
Но я получаю ошибку сегментации.
Любая идея?

1

Решение

erase линия неверна. У тебя есть j * 3 когда вы, вероятно, имеете в виду j + 3,

4

Другие решения

vector <double> *point;

объявляет неинициализированный указатель, к которому вы пытаетесь получить доступ point->size(),

Таким образом, неопределенное поведение & авария

Я бы пошел с простым объектом вместо

vector <double> point;

или же, если вы должны использовать динамическую память:

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector