我添加了两个.eval()
以防万一。我没有编译错误,也没有运行时警告。只是段错误。
感谢您帮助我解决此问题。
测试:
#include <Eigen/Eigen>
#include <iostream>
using namespace Eigen;
int main() {
Matrix<float, Dynamic, Dynamic> mat_b;
Matrix<float, Dynamic, Dynamic> mat_c;
mat_b << 1.0, 0.0, 0.5, 0.5,
0.0, 1.0, 0.5, 0.5,
1.0, 0.0, 1.0, 0.0,
0.0, 1.0, 0.0, 1.0;
mat_c << 0.0, 0.0, 0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 1.0,
1.0, 0.0, 1.0, 0.0, 0.0, 0.0,
1.0, 0.0, 0.0, 1.0, 0.0, 0.0;
std::cout << (mat_b.transpose().eval() * mat_c).eval() << "\n";
}
结果:
Segmentation fault (core dumped)
答案 0 :(得分:1)
逗号初始化程序
Eigen提供了一种逗号初始化程序语法,该语法使用户可以轻松设置矩阵,向量或数组的所有系数。只需列出系数,从左上角开始,从左到右,从上到下移动。 需要预先指定对象的大小。如果列出的系数太少或太多,Eigen就会抱怨。
重点是我的。如果您期望Matrix
ctor会从您的格式中推断出大小,那么在C ++中根本不可能。看起来您创建了16x1和24x1矩阵,然后尝试将1x16(转置的第一个矩阵)乘以24x1,这是不合法的。