Segfault of expression on sparse matrices
Submitted by Yixuan Qiu
Assigned to Nobody
Link to original bugzilla bug (#1381)
Version: 3.3 (current stable)
Description
Hi All,
Below is a simple example that generates a segment fault on a sparse matrix expression.
=====================================================================
#include <Eigen/Core>
#include <Eigen/SparseCore>
typedef Eigen::SparseMatrix<double> SpMat;
using Eigen::ArrayXd;
int main()
{
SpMat m(10, 10);
ArrayXd xx = m.diagonal().array();
return 0;
}
=====================================================================
After tracing back the call stack, I found that it was due to a return value of a local address.
In the assignment operation (https://bitbucket.org/eigen/eigen/src/9d83411cc4ee5c3ca45d6d9ba96c887c282f0474/Eigen/src/Core/functors/AssignmentFunctors.h?at=3.3&fileviewer=file-view-default#AssignmentFunctors.h-24), the signature of the source data is "const SrcScalar& b". However, the sparse matrix expression can only return a local "Scalar" (https://bitbucket.org/eigen/eigen/src/9d83411cc4ee5c3ca45d6d9ba96c887c282f0474/Eigen/src/SparseCore/SparseCompressedBase.h?at=3.3&fileviewer=file-view-default#SparseCompressedBase.h-300). Therefore, a local address will be returned (https://bitbucket.org/eigen/eigen/src/9d83411cc4ee5c3ca45d6d9ba96c887c282f0474/Eigen/src/Core/CoreEvaluators.h?at=3.3&fileviewer=file-view-default#CoreEvaluators.h-1340) to the assignment operator that results a reading data error.
Best,
Yixuan