2017-12-17 10 views
0

Siehe den folgenden CodeleftCols führen Zuordnung zu derselben Matrix verursacht Segmentation fault

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

Gibt es ein Problem mit dem Ergebnis von leftCols auf derselben Matrix zuweisen?

GCC - 4.8.4 (keine räumlichen Flags verwendet)
Ubuntu - 14.04
Eigen - 3.3.4

Antwort

0

Dies ist ein aliasing Problem, in operator= das Ziel A erste Größe verändert wird, und dann wird der Ausdruck A.leftCols(1000) wird ungültig. Sie müssen conservativeResize nennen:

A.conservativeResize(NoChange,1000); 

oder führen eine vorübergehende:

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