Which version of DOLFIN are you using?

Garth

Bartosz Sawicki wrote:
> I realized strange problem in my code when Function is created using 
> FiniteElement and DofMap. PETSc have reported memory problems, but it is 
>   difficult to repeat. I'm not able to locate the error, but it seems 
> that the bug is inside the FunctionSpace.
> 
> Please consider following code. It compiles, it works works, but 
> Valgrind reports errors.
> 
> ================
> 
> #include <dolfin.h>
> 
> using namespace dolfin;
> 
> int main (int argc, char **argv) {
> 
>    UnitCube mesh(10,10,10);
> 
>    FiniteElement fe("FiniteElement('Lagrange', 'tetrahedron', 1)");
>    DofMap dofmap("FFC dof map for FiniteElement('Lagrange', 
> 'tetrahedron', 1)", mesh);
> 
>    Function j( FunctionSpace(mesh, fe, dofmap) );
> 
>    j.vector() = 1.0;
> 
> 
>    Point point( 0.5, 0.5, 0.5);
>    Point value;
> 
>    j.eval((double *)value.coordinates(), point.coordinates());
> 
>    std::cout << value[0] << std::endl;
> 
>    return 0;
> }
> ================
> 
> $ ./demo
> 1
> 
> $ valgrind ./demo
> ==20870== Memcheck, a memory error detector.
> ==20870== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
> ==20870== Using LibVEX rev 1854, a library for dynamic binary translation.
> ==20870== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
> ==20870== Using valgrind-3.3.1-Debian, a dynamic binary instrumentation 
> framework.
> ==20870== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
> ==20870== For more details, rerun with: -v
> ==20870==
> ==20870== Invalid write of size 8
> ==20870==    at 0x4825B8A: VecGetValues_Seq (in 
> /usr/lib/libpetscvec.so.2.3.3)
> ==20870==    by 0x4851887: VecGetValues (in /usr/lib/libpetscvec.so.2.3.3)
> ==20870==    by 0x41EAD22: dolfin::PETScVector::get(double*, unsigned, 
> unsigned const*) const (PETScVector.cpp:144)
> ==20870==    by 0x4188024: dolfin::Function::interpolate(double*, 
> dolfin::FunctionSpace const&, ufc::cell const&, unsigned, int) const 
> (Function.cpp:266)
> ==20870==    by 0x418041B: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&, ufc::cell const&, unsigned) const 
> (FunctionSpace.cpp:149)
> ==20870==    by 0x41842D6: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&) const (FunctionSpace.cpp:132)
> ==20870==    by 0x41886DA: dolfin::Function::eval(double*, double 
> const*) const (Function.cpp:206)
> ==20870==    by 0x8054EEF: main (main.cpp:38)
> ==20870==  Address 0x64f71d8 is 0 bytes inside a block of size 32 free'd
> ==20870==    at 0x40241AA: operator delete[](void*) 
> (vg_replace_malloc.c:364)
> ==20870==    by 0x4180107: dolfin::FunctionSpace::Scratch::~Scratch() 
> (FunctionSpace.cpp:302)
> ==20870==    by 0x4180A98: dolfin::FunctionSpace::~FunctionSpace() 
> (FunctionSpace.cpp:64)
> ==20870==    by 0x8054E82: main (main.cpp:22)
> ==20870==
> ==20870== Invalid write of size 8
> ==20870==    at 0x40ED491: 
> ffc_04_finite_element_0::evaluate_basis(unsigned, double*, double 
> const*, ufc::cell const&) const (ffc_04.h:173)
> ==20870==    by 0x4180496: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&, ufc::cell const&, unsigned) const 
> (FiniteElement.h:60)
> ==20870==    by 0x41842D6: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&) const (FunctionSpace.cpp:132)
> ==20870==    by 0x41886DA: dolfin::Function::eval(double*, double 
> const*) const (Function.cpp:206)
> ==20870==    by 0x8054EEF: main (main.cpp:38)
> ==20870==  Address 0x64f7228 is 0 bytes inside a block of size 8 free'd
> ==20870==    at 0x40241AA: operator delete[](void*) 
> (vg_replace_malloc.c:364)
> ==20870==    by 0x4180116: dolfin::FunctionSpace::Scratch::~Scratch() 
> (FunctionSpace.cpp:303)
> ==20870==    by 0x4180A98: dolfin::FunctionSpace::~FunctionSpace() 
> (FunctionSpace.cpp:64)
> ==20870==    by 0x8054E82: main (main.cpp:22)
> ==20870==
> ==20870== Invalid read of size 8
> ==20870==    at 0x41804B8: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&, ufc::cell const&, unsigned) const 
> (FunctionSpace.cpp:158)
> ==20870==    by 0x41842D6: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&) const (FunctionSpace.cpp:132)
> ==20870==    by 0x41886DA: dolfin::Function::eval(double*, double 
> const*) const (Function.cpp:206)
> ==20870==    by 0x8054EEF: main (main.cpp:38)
> ==20870==  Address 0x64f71d8 is 0 bytes inside a block of size 32 free'd
> ==20870==    at 0x40241AA: operator delete[](void*) 
> (vg_replace_malloc.c:364)
> ==20870==    by 0x4180107: dolfin::FunctionSpace::Scratch::~Scratch() 
> (FunctionSpace.cpp:302)
> ==20870==    by 0x4180A98: dolfin::FunctionSpace::~FunctionSpace() 
> (FunctionSpace.cpp:64)
> ==20870==    by 0x8054E82: main (main.cpp:22)
> ==20870==
> ==20870== Invalid read of size 8
> ==20870==    at 0x41804BB: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&, ufc::cell const&, unsigned) const 
> (FunctionSpace.cpp:158)
> ==20870==    by 0x41842D6: dolfin::FunctionSpace::eval(double*, double 
> const*, dolfin::Function const&) const (FunctionSpace.cpp:132)
> ==20870==    by 0x41886DA: dolfin::Function::eval(double*, double 
> const*) const (Function.cpp:206)
> ==20870==    by 0x8054EEF: main (main.cpp:38)
> ==20870==  Address 0x64f7228 is 0 bytes inside a block of size 8 free'd
> ==20870==    at 0x40241AA: operator delete[](void*) 
> (vg_replace_malloc.c:364)
> ==20870==    by 0x4180116: dolfin::FunctionSpace::Scratch::~Scratch() 
> (FunctionSpace.cpp:303)
> ==20870==    by 0x4180A98: dolfin::FunctionSpace::~FunctionSpace() 
> (FunctionSpace.cpp:64)
> ==20870==    by 0x8054E82: main (main.cpp:22)
> 1
> ==20870==
> ==20870== ERROR SUMMARY: 16 errors from 4 contexts (suppressed: 353 from 2)
> ==20870== malloc/free: in use at exit: 16 bytes in 2 blocks.
> ==20870== malloc/free: 463 allocs, 461 frees, 168,090 bytes allocated.
> ==20870== For counts of detected errors, rerun with: -v
> ==20870== searching for pointers to 2 not-freed blocks.
> ==20870== checked 4,507,820 bytes.
> ==20870==
> ==20870== LEAK SUMMARY:
> ==20870==    definitely lost: 16 bytes in 2 blocks.
> ==20870==      possibly lost: 0 bytes in 0 blocks.
> ==20870==    still reachable: 0 bytes in 0 blocks.
> ==20870==         suppressed: 0 bytes in 0 blocks.
> ==20870== Rerun with --leak-check=full to see details of leaked memory.
> 
> 
> BArtek
> _______________________________________________
> DOLFIN-dev mailing list
> [email protected]
> http://www.fenics.org/mailman/listinfo/dolfin-dev


_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to