所以我的代码中有以下几行:
MatrixXd qdash = zeroCentredMeasurementPointCloud_.topLeftCorner(3, zeroCentredMeasurementPointCloud_.cols());
Matrix3d H = q * qdash.transpose();
Eigen::JacobiSVD<MatrixXd> svd(H, Eigen::ComputeThinU | Eigen::ComputeThinV);
现在我确信qdash
和H
正确初始化(q
也在其他地方)。涉及Eigen::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
即。当我试图释放它时它是分段错误。现在根据教程here,我需要做的就是使用这个功能:
MatrixXf m = MatrixXf::Random(3,2);
JacobiSVD<MatrixXf> svd(m, ComputeThinU | ComputeThinV);
任何人都可以理解为什么它在我的情况下失败了吗?
答案 0 :(得分:1)
好的,这太疯狂了。事实证明我使用的是Eigen Alignment,它在我的操作系统上并没有真正起作用。这导致了一个错误,该错误将根据生成的可执行文件的大小更改位置。
故事的寓意是要小心你的包含。