[ITK-users] Segfault in Wiki Example: QuadEdgeMeshParameterizationFilter
DVigneault
davis.vigneault at gmail.com
Fri Jun 5 11:09:17 EDT 2015
All--
While running the QuadEdgeMesh Parameterization example from the wiki [1]
using the provided spherical mesh, I got a segfault on
itkBorderQuadEdgeMeshFilter.hxx:75:
InputIteratorGeom it = bdryEdge->BeginGeomLnext();
The options I used were ./program sphere.vtk 0 0 output.vtk
After some investigation, I believe it may be that sphere.vtk has no
internal edges. Therefore, BorderQuadEdgeMeshFilter::Evaluate is returning
an empty std::list, and list->Begin() is eventually dereferenced on the
above line. Should an itkWarningMacro() or itkExceptionMacro() be placed
before the above line, checking whether the list is empty? Or should this
be on the user?
[1]
http://www.itk.org/Wiki/ITK/Examples/Meshes/QuadEdgeMeshParameterizationFilter
One other thing that's a bit confusing--if I pass ./program sphere.vtk 1 0
output.vtk (using DISK_BORDER_TRANSFORM instead of SQUARE_BORDER_TRANSFORM),
there is no segfault in the wiki example. In the small program below,
however, it segfaults in either case.
Here's a program that describes the problem:
#include "itkRegularSphereMeshSource.h"
#include "itkBorderQuadEdgeMeshFilter.h"
typedef itk::QuadEdgeMesh< double, 3 > TMesh;
typedef itk::RegularSphereMeshSource< TMesh > TSource;
typedef itk::QuadEdgeMeshBoundaryEdgesMeshFunction< TMesh > TBorderFunction;
typedef itk::BorderQuadEdgeMeshFilter< TMesh, TMesh > TBorder;
int main( int argc, char* argv[] )
{
TSource::Pointer source = TSource::New();
source->Update();
TMesh::Pointer mesh = source->GetOutput();
TBorderFunction::Pointer fn = TBorderFunction::New();
TMesh::EdgeListPointerType list = fn->Evaluate( *(mesh) );
std::cout << list->size() << std::endl; // 0
// A sphere has no internal edges
// Returns a std::list size zero
TBorder::Pointer border = TBorder::New();
border->SetTransformType( TBorder::SQUARE_BORDER_TRANSFORM );
// Segfaults even if I change this to DISK_BORDER_TRANSFORM
border->SetInput( mesh );
border->Update(); // Segfault
// itkBorderQuadEdgeMeshFilter.hxx:110
// empty std::list is assigned to oborder_it
// for loop is bypassed b/c list->begin() == list->end()
// InputQEType* output = *oborder_it;
// return output; from ComputeLongestBorder
// InputQEType *bdryEdge = ComputeLongestBorder();
// Segfault:
// itkBoarderQuadEdgeMeshFilter.hxx:75
// InputIteratorGeom it = bdryEdge->BeginGeomLnext();
return EXIT_SUCCESS;
}
--
View this message in context: http://itk-users.7.n7.nabble.com/Segfault-in-Wiki-Example-QuadEdgeMeshParameterizationFilter-tp35771.html
Sent from the ITK - Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list