2017-12-17 6 views
0

は、次のコードleftColsは同じマトリックスへの割り当てを結果同じ行列にleftColsの結果を割り当てることに問題があるセグメンテーションフォールト

#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 
} 

を参照してください原因は?

GCC - 4.8.4(用いない空間フラグ)
のUbuntu - 14.04
固有 - 3.3.4

答えて

0

これは式次いでaliasing号、operator=の宛先Aが最初にリサイズされ、そしてA.leftCols(1000)が無効になります。あなたはconservativeResizeを呼び出す必要があります:

A.conservativeResize(NoChange,1000); 

や一時をご紹介:

A = A.leftCols(1000).eval(); 
関連する問題