[vtkusers] segmentation fault with vtkImageData and vtkMetaImageReader

Jérôme jerome.velut at gmail.com
Thu Jun 9 03:30:03 EDT 2011


Fine !
BTW, I mixed my latin and greek ;) I meant 'scope' not 'focus'.
SmartPointer are really scope-dependent, unless you manage their reference
count by your own (which I do not advice at all...).

Best regards,
Jerome

2011/6/9 Laurent Mundeleer <laurent.mundeleer at uclouvain.be>

> Yes thank you, that's a solution :)
> And actually with this I can keep smartPointers.
>
> Best regards,
>
> ++
> Laurent
>
>
> On Wed, 2011-06-08 at 17:45 +0200, Jérôme wrote:
> > That's much clearer now!
> > If your reader and cast filter are not in the same place (focus),
> > the smart pointer has deleted the reader. Now it's sure. The simplest
> > work around (but not the fanciest/cutest) would be:
> >
> > reader->Update( );
> > vtkImagedata* readerOutput =
> > vtkImageData::SafeDownCast( reader->GetOutputDataObject( 0, 0 ));
> > vtkImageData* myImage = vtkImageData::New( );
> > myImage->DeepCopy( readerOutput );
> >
> > Then you can use myImage everywhere you want. Don't forget to
> > Delete( ) it, since it is not a SmartPointer but a simple New()
> > allocation.
> >
> > HTH
> > Jerome
> >
> >
> > 2011/6/8 Laurent Mundeleer <laurent.mundeleer at uclouvain.be>
> >         Hi Jerome,
> >         Thank you for your answer.
> >
> >         The problem is that the reader and the cast are not done at
> >         the same
> >         place so that's why I have a vtkImageData which is transmitted
> >         in
> >         another parts of the code.
> >         I use a vtkImageData to have some informations such as
> >         dimensions,
> >         center, etc and because we use other types so we have
> >         sometimes to
> >         translate from vtkImageData to another image type (custom
> >         image types or
> >         QImage for instance).
> >
> >         I understand I break the pipeline doing this as I have :
> >         reader->imageData | break
> >         imageData->cast->mapper-> etc
> >         instead of : reader->cast->mapper-> etc
> >         But if I want to keep the pipeline complete, I have to
> >         transmit a
> >         vtkAlgorithm pointer which is less usable outside of vtk, and
> >         actually I
> >         don't need the beginning of the pipeline, I have enough with
> >         the
> >         vtkImageData.
> >
> >         Actually if I delete the reader pointer I have the same
> >         problem, so that
> >         means using the setInput() method as I do involves somewhere a
> >         call to
> >         myVtkImageData->GetProducerPort() which is became null...
> >
> >         That means also I guess I can't use the same reader to read a
> >         lot of
> >         vtkImageData for instance (which would solve my leak problem),
> >         because
> >         somewhere it keeps a reference to the reader which has done
> >         the import
> >         in the vtkImageData.
> >         I can't imagine what happen if I read a first vtkImageData,
> >         and then a
> >         second, and try to display or apply a filter to the first one.
> >
> >         Thanks,
> >
> >         Laurent
> >
> >
> >         On Wed, 2011-06-08 at 16:42 +0200, Jérôme wrote:
> >         > Hi,
> >         >
> >         > You should use
> >         cast->SetInputConnection( reader->GetOutputPort( ) );
> >         > instead of the old fashion SetInput.
> >         > IMHO, the problem is that your smart pointer, for some
> >         reasons
> >         > (reference count becomes null), decided to deallocate the
> >         reader, and
> >         > thus the underlying output.
> >         >
> >         > HTH,
> >         > Jerome
> >         >
> >         > 2011/6/7 Laurent Mundeleer <laurent.mundeleer at uclouvain.be>
> >         >         Hi everyone,
> >         >         I have a strange problem in reading a MetaImage.
> >         >         I have a segmentation fault when I access the
> >         vtkImageData,
> >         >         but if I use a direct pointer instead of a
> >         smartPointer on the
> >         >         vtkImageReader it's ok (but I have a memory leak).
> >         >
> >         >         What am I doing wrong ?
> >         >         Here are some code extracts of what is working :
> >         >
> >         >         // in reader method :
> >         >         ...
> >         >         vtkImageData *imageData = 0;
> >         >         ...
> >         >
> >         >         vtkMetaImageReader* reader =
> >         vtkMetaImageReader::New();
> >         >         //add to replace :
> >         vtkSmartPointer<vtkMetaImageReader> reader
> >         >         = vtkSmartPointer<vtkMetaImageReader>::New();
> >         >         // and have no delete at the end of the reading
> >         >         ..
> >         >         reader->Update();
> >         >         ...
> >         >         imageData = reader->GetOutput();
> >         >
> >         >         // no delete on the reader
> >         >
> >         >         /------------------------------------------
> >         >
> >         >         // in renderer method :
> >         >            vtkSmartPointer<vtkImageCast> castSource
> >         >         =vtkSmartPointer<vtkImageCast>::New();
> >         >            castSource->SetOutputScalarTypeToUnsignedChar();
> >         >            castSource->SetInput(imageData); // seg fault
> >         >            castSource->Update();
> >         >
> >         >         /---------------------------------------------
> >         >         // or in unit test :
> >         >         vtkImageData*volume = readingMethod();
> >         >         ...
> >         >         double *origin = volume->GetOrigin(); // seg fault
> >         >
> >         >
> >         >         Thank you for any help,
> >         >         Best Regards,
> >         >
> >         >         ++
> >         >         Laurent
> >         >
> >         >
> >         >         _______________________________________________
> >         >         Powered by www.kitware.com
> >         >
> >         >         Visit other Kitware open-source projects at
> >         >         http://www.kitware.com/opensource/opensource.html
> >         >
> >         >         Please keep messages on-topic and check the VTK FAQ
> >         at:
> >         >         http://www.vtk.org/Wiki/VTK_FAQ
> >         >
> >         >         Follow this link to subscribe/unsubscribe:
> >         >         http://www.vtk.org/mailman/listinfo/vtkusers
> >         >
> >
> >
> >
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110609/3deed48a/attachment.htm>


More information about the vtkusers mailing list