[Insight-users] Segmentation Faults with ITK
Karsten Grasemann
Karsten.Grasemann at ruhr-uni-bochum.de
Tue Jan 4 08:35:05 EST 2005
Hello everybody,
I have a big problem with itk. I try to build an application that can do some
segmentation an generates a model out of a DICOM or RAW-Image.
So I implement the example from the "ItkSoftwareGuide, Chapter 9.4.3
Deformable Model and Gibbs Prior" in a seperate method. Another method will
build my binary-image as described in Chapter 9.1.1 "Connected Threshold".
Everything is wrapped in a Qt-GUI framework.
So far so good. In the compilation process I get some warnings :
"...
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx: In
member function `typename itk::FiniteDifferenceFunction<TImage>::PixelType
itk::CurvatureFlowFunction<TImage>::ComputeUpdate(typename
itk::FiniteDifferenceFunction<TImageType>::NeighborhoodType&, void*,
typename itk::FiniteDifferenceFunction<TImageType>::FloatOffsetType&) [with
TImage = itk::Image<short unsigned int, 3>]':
/usr/local/include/InsightToolkit/Common/itkPointLocator.txx:161:
instantiated from here
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:104:
Warnung: initialization
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:104:
Warnung: argument
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Common/itkPointLocator.txx:161:
instantiated from here
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:109:
Warnung: assignment
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:109:
Warnung: argument
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Common/itkPointLocator.txx:161:
instantiated from here
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:119:
Warnung: assignment
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:119:
Warnung: argument
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:137:
Warnung: initialization
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:137:
Warnung: argument
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Common/itkPointLocator.txx:161:
instantiated from here
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:143:
Warnung: assignment
to `short unsigned int' from `double'
/usr/local/include/InsightToolkit/Algorithms/itkCurvatureFlowFunction.txx:143:
Warnung: argument
to `short unsigned int' from `double'
... "
... nothing serious so far. But when I run the application, my program bails
out with a segmentation fault in the calculation of the Deformable Mesh
Filter.
So I started a new Gdb-session and got the following Debug Infos:
"...
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) set args
(gdb) run
[Thread debugging using libthread_db enabled]
[New Thread 1086799200 (LWP 10627)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1086799200 (LWP 10627)]
itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin (this=0x0) at stl_iterator.h:593
(gdb)
..."
an assembler dump does the following
"...
Dump of assembler code for function
_ZN3itk15VectorContainerImPNS_13CellInterfaceIdNS_14CellTraitsInfoILi3EffmmmNS_5PointIfLj3EEENS0_ImS4_EESt3setImSt4lessImESaImEEEEEEE5BeginEv:
0x080f8570 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+0>: push %ebp
0x080f8571 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+1>: mov %esp,%ebp
0x080f8573 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+3>: mov 0xc(%ebp),%edx
0x080f8576 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+6>: mov 0x8(%ebp),%eax
-- Here comes the Point of bailout --> 0x080f8579
<itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+9>: mov 0x30(%edx),%edx
0x080f857c <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+12>: movl $0x0,(%eax)
0x080f8582 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+18>: mov %edx,0x4(%eax)
0x080f8585 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+21>: pop %ebp
0x080f8586 <itk::VectorContainer<unsigned long, itk::CellInterface<double,
itk::CellTraitsInfo<3, float, float, unsigned long, unsigned long, unsigned
long, itk::Point<float, 3u>, itk::VectorContainer<unsigned long,
itk::Point<float, 3u> >, std::set<unsigned long, std::less<unsigned long>,
std::allocator<unsigned long> > > >*>::Begin()+22>: ret $0x4
End of assembler dump.
..."
it seems to come out of the stdlib
"
template<typename _Iterator, typename _Container>
574 class __normal_iterator
575 : public iterator<typename
iterator_traits<_Iterator>::iterator_category,
576 typename iterator_traits<_Iterator>::value_type,
577 typename
iterator_traits<_Iterator>::difference_type,
578 typename iterator_traits<_Iterator>::pointer,
579 typename iterator_traits<_Iterator>::reference>
580 {
581 protected:
582 _Iterator _M_current;
583
584 public:
585 typedef typename iterator_traits<_Iterator>::difference_type
586
difference_type;
587 typedef typename iterator_traits<_Iterator>::reference reference;
588 typedef typename iterator_traits<_Iterator>::pointer pointer;
589
590 __normal_iterator() : _M_current(_Iterator()) { }
591
592 explicit
--- Bailout here --->
593 __normal_iterator(const _Iterator& __i) : _M_current(__i) { }
594
595 // Allow iterator to const_iterator conversion
596 template<typename _Iter>
597 inline __normal_iterator(const __normal_iterator<_Iter,
_Container>& __i)
598 : _M_current(__i.base()) { }
599
"
So, has anybody an idea of a workaround ? Even the examples in the
InsightApplications will bail out with a segmentation fault. I haven't
debugged them yet ...
Some system and version infos:
AMD 2200+, 512Meg, SuSE-Linux-i586 2.6.5, GCC 3.3.3-41, CMake 2.0.5,
InsightToolkit 1.8.0, InsightApplications 1.8.0, VTK 4.2, QT 3.3.1-36.16, DDD
3.3.8
Thanx for the help
Karsten Grasemann
More information about the Insight-users
mailing list