[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