请参阅以下代码
#include "Eigen/Dense"
#include <iostream>
using namespace Eigen;
int main(int argc, char**) {
MatrixXf A = MatrixXf::Random(4096, 4096);
MatrixXf B = A.leftCols(1000); // <-- works fine
std::cout << "--------" << std::endl;
A = A.leftCols(1000); // <-- SegFault
}
将leftCols的结果分配给同一个矩阵有什么问题吗?
GCC - 4.8.4(未使用空间标志)
Ubuntu - 14.04
特征 - 3.3.4
答案 0 :(得分:0)
这是aliasing问题,operator=
首先调整目标A
的大小,然后表达式A.leftCols(1000)
变为无效。您需要致电conservativeResize:
A.conservativeResize(NoChange,1000);
或介绍一个临时的:
A = A.leftCols(1000).eval();