[vtkusers] segmentation fault with vtkImageData and vtkMetaImageReader

Laurent Mundeleer laurent.mundeleer at uclouvain.be
Wed Jun 8 10:59:54 EDT 2011


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
> 





More information about the vtkusers mailing list