1

このコードでセグメンテーション違反が発生しましたが、その理由がわかりません:

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 点間のユークリッド距離を計算する関数です。基本的に私がすることは、「2 つの点が互いに近すぎる場合は、そのうちの 1 つを削除する」のようなものです。しかし、セグメンテーション違反が発生します。何か案が?

4

2 に答える 2

4

erase行が間違っています。あなたがj * 3おそらく意味するとき、あなたは持っていますj + 3

于 2012-09-05T16:08:54.123 に答える
4
vector <double> *point;

でアクセスしようとする初期化されていないポインタを宣言しますpoint->size()

したがって、未定義の動作とクラッシュ。

代わりに単純なオブジェクトを使用します

vector <double> point;

または、動的メモリを使用する必要がある場合:

vector <double> *point = new vector<double>;
于 2012-09-05T15:47:54.607 に答える