Created
July 20, 2013 20:45
-
-
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…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
==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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
==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