c++中引起奇段故障的特征Jacobi

Eigen Jacobi causing odd segfault in c++

本文关键字:故障 特征 Jacobi 段故障 c++      更新时间:2023-10-16

所以我的代码中有以下几行:

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

现在我确信qdashH被正确初始化(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

即我想,当试图释放它时,它是分段错误的。现在,根据这里的教程,我应该做的就是使用这个功能:

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

有人知道为什么它在我的情况下失败了吗?

这太疯狂了。原来我用的是特征对齐,这在我的操作系统上不起作用。这会导致一个错误,它会根据生成的可执行文件的大小改变位置。

这个故事的寓意是:小心你的内容。