Skip to content

Instantly share code, notes, and snippets.

Created July 20, 2013 20:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/6046361 to your computer and use it in GitHub Desktop.
Save anonymous/6046361 to your computer and use it in GitHub Desktop.
This illustrate a problem with Eigen UmfPack wrapper for solving linear least square problems. UmfPackLU maintain internal pointers to the sparse matrix on which it is computed so if the matrix is deleted prior to the solver being used, invalid memory reads occur. I'm not sure if this is a bug. If it is intended behavior, it should probably be d…
// g++ -o eigen_test eigen_sparse_solver.cc -I/home/julien/slash/include/eigen3 -I/usr/include/suitesparse -lumfpack -lamd -lblas
#include <cstdlib>
#include <cassert>
#include <Eigen/Eigen>
#include <Eigen/UmfPackSupport>
#include <vector>
#include <iostream>
using namespace Eigen;
using namespace std;
typedef SparseMatrix<double, ColMajor> Sparsed;
typedef Triplet<double> Tripletd;
int main(int argc, char** argv) {
Sparsed* A = new Sparsed(3, 3);
// Same example as Eigen basic linear solving
A->insert(0, 0) = 1;
A->insert(0, 1) = 2;
A->insert(0, 2) = 3;
A->insert(1, 0) = 4;
A->insert(1, 1) = 5;
A->insert(1, 2) = 6;
A->insert(2, 0) = 7;
A->insert(2, 1) = 8;
A->insert(2, 2) = 10;
A->makeCompressed();
UmfPackLU<Sparsed> solver;
solver.compute(*A);
assert(solver.info() == Success);
// Problematic deletion case
delete A;
Vector3d b;
b << 3, 3, 4;
VectorXd x = solver.solve(b);
cout << "x : " << x.transpose() << endl;
// Working deletion case
//delete A;
}
==15000== Memcheck, a memory error detector
==15000== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==15000== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==15000== Command: ./eigen_test
==15000==
==15000== Invalid read of size 4
==15000== at 0x4E520C6: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c4bc is 12 bytes inside a block of size 16 free'd
==15000== at 0x4C2BA6C: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x40272D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
==15000== Invalid read of size 8
==15000== at 0x4E521A3: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c610 is 0 bytes inside a block of size 72 free'd
==15000== at 0x4C2B01C: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x40301C: Eigen::internal::CompressedStorage<double, int>::~CompressedStorage() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40274D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
==15000== Invalid read of size 4
==15000== at 0x4E521A9: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c6a0 is 0 bytes inside a block of size 36 free'd
==15000== at 0x4C2B01C: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x403039: Eigen::internal::CompressedStorage<double, int>::~CompressedStorage() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40274D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
==15000== Invalid read of size 4
==15000== at 0x4E52608: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c4b4 is 4 bytes inside a block of size 16 free'd
==15000== at 0x4C2BA6C: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x40272D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
==15000== Invalid read of size 4
==15000== at 0x4E5260D: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c4b0 is 0 bytes inside a block of size 16 free'd
==15000== at 0x4C2BA6C: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x40272D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
==15000== Invalid read of size 4
==15000== at 0x4E52638: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c6a0 is 0 bytes inside a block of size 36 free'd
==15000== at 0x4C2B01C: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x403039: Eigen::internal::CompressedStorage<double, int>::~CompressedStorage() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40274D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
==15000== Invalid read of size 8
==15000== at 0x4E5263C: umfdi_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x4E673AD: umfpack_di_solve (in /usr/lib/libumfpack.so.3.1.0)
==15000== by 0x401FF9: Eigen::umfpack_solve(int, int const*, int const*, double const*, double*, double const*, void*, double const*, double*) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40686B: bool Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >::_solve<Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, 3, 1, 0, 3, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405FDA: void Eigen::internal::solve_retval<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x405006: void Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x403C32: void Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >::evalTo<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&) const (in /home/julien/tm/v2/eigen_test)
==15000== by 0x402A6C: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > >(Eigen::ReturnByValue<Eigen::internal::solve_retval_base<Eigen::UmfPackLU<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, 3, 1, 0, 3, 1> > > const&) (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4019FA: main (in /home/julien/tm/v2/eigen_test)
==15000== Address 0x617c610 is 0 bytes inside a block of size 72 free'd
==15000== at 0x4C2B01C: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15000== by 0x40301C: Eigen::internal::CompressedStorage<double, int>::~CompressedStorage() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x40274D: Eigen::SparseMatrix<double, 0, int>::~SparseMatrix() (in /home/julien/tm/v2/eigen_test)
==15000== by 0x4018F4: main (in /home/julien/tm/v2/eigen_test)
==15000==
x : -2 1 1
==15000==
==15000== HEAP SUMMARY:
==15000== in use at exit: 0 bytes in 0 blocks
==15000== total heap usage: 86 allocs, 86 frees, 16,302 bytes allocated
==15000==
==15000== All heap blocks were freed -- no leaks are possible
==15000==
==15000== For counts of detected and suppressed errors, rerun with: -v
==15000== ERROR SUMMARY: 43 errors from 7 contexts (suppressed: 2 from 2)
==15197== Memcheck, a memory error detector
==15197== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==15197== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==15197== Command: ./eigen_test
==15197==
x : -2 1 1
==15197==
==15197== HEAP SUMMARY:
==15197== in use at exit: 0 bytes in 0 blocks
==15197== total heap usage: 86 allocs, 86 frees, 16,302 bytes allocated
==15197==
==15197== All heap blocks were freed -- no leaks are possible
==15197==
==15197== For counts of detected and suppressed errors, rerun with: -v
==15197== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment