1

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

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

我猜想在尝试释放它时 IE 会出现 seg-faulting。现在根据这里的教程,使用这个功能我要做的就是:

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

谁能明白为什么它在我的情况下失败了?

4

1 回答 1

1

好的,这太疯狂了。原来我使用的是 Eigen Alignment,它在我的操作系统上并没有真正起作用。这导致了一个错误,该错误会根据生成的可执行文件的大小更改位置。

这个故事的寓意是要小心你的包含。

于 2013-01-11T04:54:53.190 回答