1

したがって、コードには次の行があります。

MatrixXd qdash = zeroCentredMeasurementPointCloud_.topLeftCorner(3, zeroCentredMeasurementPointCloud_.cols());
Matrix3d H = q * qdash.transpose();
Eigen::JacobiSVD<MatrixXd> svd(H, Eigen::ComputeThinU | Eigen::ComputeThinV);

今、私はそれが正しく初期化されていると確信しています(qdashまた、他の場所でもあります)。関与する最後の行は、プログラムが残っているとこのエラーをスローします。HqEigen::JacobiSVD

Program received signal SIGSEGV, Segmentation fault.
0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3

0  0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
1  0xb032a464 in __free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
2  0xb0329f7d in free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3

IEを解放しようとすると、セグフォルトが発生していると思います。チュートリアルhereによると、この機能を使用するために必要なことは次のとおりです。

MatrixXf m = MatrixXf::Random(3,2);
JacobiSVD<MatrixXf> svd(m, ComputeThinU | ComputeThinV);

私の場合、なぜそれが失敗するのか誰にもわかりますか?

4

1 に答える 1

1

わかりましたので、これは非常にクレイジーです。私のオペレーティングシステムでは実際には機能しないEigen Alignmentを使用していたことがわかりました。これにより、生成された実行可能ファイルのサイズに基づいて場所が変更されるというエラーが発生しました。

ストーリーの教訓は、インクルードに注意することです。

于 2013-01-11T04:54:53.190 に答える