2

ここのEigenチュートリアルで示されているコンマの初期化が機能していないように見えるという問題があります。

ベクトルが初期化されるメインセクションがあるシステムがあります。

主要:

VectorXd v;

および関数:

double useVector(VectorXd &v) {
    dataI = model_.find();
    v << model_[dataI].v[0], model_[dataI].v[1], model_[dataI].v[2], 1;
    return dataI;
}

注:関数は次のように使用されます:

double distance = useVector(v);

今はmodel_[dataI].vでありdouble[3]、それは間違いなく機能しています。私の理解では、これはこれと同じです:

VectorXd v;
v << 1, 2, 3,
     4, 5, 6,
     7, 8, 9;

しかし、それは機能していません。コードは、関数のコンマ初期化フェーズでセグメント障害が発生しています。

注:これは機能します:

v.resize(4)
v[0] = model_[dataI].v[0];
v[1] = model_[dataI].v[1];
v[2] = model_[dataI].v[2];
v[3] = 1;

vが次のように初期化されている限り:

VectorXd v(4);

これにより、サイズ変更のポイントがすぐにわかります(ただし、サイズを変更すると、セグメンテーション違反が再び発生します)。

なぜこれが起こっているのか誰かが知っていますか?

4

1 に答える 1

2

はい、コンマ初期化子を使用する前に、ベクトル vを適切なサイズに変更する必要があります。

于 2013-01-07T09:18:11.173 に答える