[ITK-users] Possible memory leak in itk::IterativeTriangleCellSubdivisionQuadEdgeMeshFilter

DVigneault davis.vigneault at gmail.com
Wed Jun 3 12:49:33 EDT 2015


All--

I've been observing some erratic behavior in my program, which after some
investigation I believe may be due to a memory leak in
itk::IterativeTriangleCellSubdivisionQuadEdgeMeshFilter.  I've copied below
a minimal example which exhibits the problem, along with the output from
valgrind showing 15,360 bytes lost in 128 blocks.  Is anyone able to
reproduce this issue?  (Note that the 72,704 bytes still reachable is 
valgrind's fault
<http://stackoverflow.com/questions/30376601/valgrind-memory-still-reachable-with-trivial-program-using-iostream> 
, not ITK's).

///////////////////////////////////////
// MINIMAL EXAMPLE //
///////////////////////////////////////

#include "itkQuadEdgeMesh.h"
#include "itkRegularSphereMeshSource.h"
#include "itkLoopTriangleCellSubdivisionQuadEdgeMeshFilter.h"
#include "itkIterativeTriangleCellSubdivisionQuadEdgeMeshFilter.h"

typedef itk::QuadEdgeMesh< double, 3 > TMesh;
typedef itk::RegularSphereMeshSource< TMesh > TSource;
typedef itk::LoopTriangleCellSubdivisionQuadEdgeMeshFilter< TMesh, TMesh >
TLoop;
typedef itk::IterativeTriangleCellSubdivisionQuadEdgeMeshFilter< TMesh,
TLoop > TSubdivide;

int main(int argc, char ** argv)
{

  TSource::Pointer source = TSource::New();
  TSubdivide::Pointer sub = TSubdivide::New();
  sub->SetInput( source->GetOutput() );
  sub->SetResolutionLevels( 1 );
  sub->Update();

  return EXIT_SUCCESS;

}

////////////////////////////////////////
// VALGRIND OUTPUT //
////////////////////////////////////////

$ valgrind --leak-check=full ./dv-registration
==20328== Memcheck, a memory error detector
==20328== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==20328== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==20328== Command: ./dv-registration
==20328== 
==20328== 
==20328== HEAP SUMMARY:
==20328==     in use at exit: 92,160 bytes in 257 blocks
==20328==   total heap usage: 13,030 allocs, 12,773 frees, 879,010 bytes
allocated
==20328== 
==20328== 19,456 (15,360 direct, 4,096 indirect) bytes in 128 blocks are
definitely lost in loss record 2 of 3
==20328==    at 0x4C2B0A5: operator new(unsigned long)
(vg_replace_malloc.c:324)
==20328==    by 0x4984F8: itk::QuadEdgeMesh<double, 3u,
itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float>
>::AddFace(itk::GeometricalQuadEdge<unsigned long, unsigned long, bool,
bool, true>*) (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x49926F: itk::QuadEdgeMesh<double, 3u,
itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float>
>::AddFaceWithSecurePointList(std::vector<unsigned long,
std::allocator<unsigned long> > const&, bool) (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x49D0D5: void
itk::CopyMeshToMeshCells<itk::QuadEdgeMesh<double, 3u,
itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float> >,
itk::QuadEdgeMesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,
bool, float, float> > >(itk::QuadEdgeMesh<double, 3u,
itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float> > const*,
itk::QuadEdgeMesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,
bool, float, float> >*) (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x491766:
itk::QuadEdgeMeshToQuadEdgeMeshFilter<itk::QuadEdgeMesh<double, 3u,
itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float> >,
itk::QuadEdgeMesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,
bool, float, float> > >::CopyInputMeshToOutputMeshCells() (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x4916E2:
itk::QuadEdgeMeshToQuadEdgeMeshFilter<itk::QuadEdgeMesh<double, 3u,
itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float> >,
itk::QuadEdgeMesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,
bool, float, float> > >::CopyInputMeshToOutputMeshGeometry() (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x491063:
itk::IterativeTriangleCellSubdivisionQuadEdgeMeshFilter<itk::QuadEdgeMesh<double,
3u, itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float> >,
itk::LoopTriangleCellSubdivisionQuadEdgeMeshFilter<itk::QuadEdgeMesh<double,
3u, itk::QuadEdgeMeshTraits<double, 3u, bool, bool, float, float> >,
itk::QuadEdgeMesh<double, 3u, itk::QuadEdgeMeshTraits<double, 3u, bool,
bool, float, float> > > >::GenerateData() (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x4C578C:
itk::ProcessObject::UpdateOutputData(itk::DataObject*) (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328==    by 0x4866C6: main (in
/home/davis/Developer/oxford/Stebbing_Method/SubTest/bin/dv-registration)
==20328== 
==20328== LEAK SUMMARY:
==20328==    definitely lost: 15,360 bytes in 128 blocks
==20328==    indirectly lost: 4,096 bytes in 128 blocks
==20328==      possibly lost: 0 bytes in 0 blocks
==20328==    still reachable: 72,704 bytes in 1 blocks
==20328==         suppressed: 0 bytes in 0 blocks
==20328== Reachable blocks (those to which a pointer was found) are not
shown.
==20328== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==20328== 
==20328== For counts of detected and suppressed errors, rerun with: -v
==20328== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)




--
View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Possible-memory-leak-in-itk-IterativeTriangleCellSubdivisionQuadEdgeMeshFilter-tp7587434.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.


More information about the Insight-users mailing list