leftCols结果分配到同一矩阵会导致分段错误

时间:2017-12-17 16:18:20

标签: c++ eigen

请参阅以下代码

#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

1 个答案:

答案 0 :(得分:0)

这是aliasing问题,operator=首先调整目标A的大小,然后表达式A.leftCols(1000)变为无效。您需要致电conservativeResize

A.conservativeResize(NoChange,1000);

或介绍一个临时的:

A = A.leftCols(1000).eval();