Skip to content

Instantly share code, notes, and snippets.

@julienr
Forked from anonymous/eigen_sparse_solver.cc
Created July 20, 2013 20:46

Revisions

  1. @invalid-email-address Anonymous created this gist Jul 20, 2013.
    44 changes: 44 additions & 0 deletions eigen_sparse_solver.cc
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    // 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;
    }
    124 changes: 124 additions & 0 deletions problematic_deletion_valgrind.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,124 @@
    ==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)
    15 changes: 15 additions & 0 deletions working_deleteion_valgrind.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,15 @@
    ==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)