[vtkusers] Segmentation fault

Bill Lorensen bill.lorensen at gmail.com
Tue Apr 8 09:12:28 EDT 2014


Are you certain that the input file has Normals?
On Apr 8, 2014 8:33 AM, "elena bresciani" <elena.bresciani87 at gmail.com>
wrote:

> Here it is, I omitted the inclusion of the header files and the output
> section
>
>
>
> int main ( int argc, char *argv[] )
> {
>
>     std::string filename = argv[1];
>
>     // Read data from the file
>     vtkSmartPointer<vtkXMLPolyDataReader> reader =
> vtkSmartPointer<vtkXMLPolyDataReader>::New();
>     reader->SetFileName(filename.c_str());
>     reader->Update();
>
>     // polydata object
>     vtkSmartPointer<vtkPolyData> polydata = reader->GetOutput();
>
>     // get normals
>     vtkDoubleArray *pointNormalsArray = vtkDoubleArray::SafeDownCast
> (polydata->GetPointData()->GetNormals());
>
>
>     vtkSmartPointer<vtkPolyData> newpolydata =
> vtkSmartPointer<vtkPolyData>::New();
>     vtkSmartPointer<vtkPoints> newPoints =
> vtkSmartPointer<vtkPoints>::New();
>
>     // for every point p1 in the polydata find the point p2 which lies on
> the normal at a distance D from p1
>
>     for(vtkIdType i = 0; i < pointNormalsArray->GetNumberOfTuples(); i++)
>
>        {
>             double p1[3];
>             polydata->GetPoint(i,p1); //prendo il punto
>
>             double pN[3];
>             pointNormalsArray->GetTuple(i, pN);
>
>             double p2[3];
>             double D=2*atoi(argv[3]);
>             p2[0]=p1[0]-pN[0]*D;
>             p2[1]=p1[1]-pN[1]*D;
>             p2[2]=p1[2]-pN[2]*D;
>
>
>             vtkIdType pid[1];
>             pid[0]=newPoints->InsertNextPoint(p2);
>
>         }
>
>         //set points to polydata
>         newpolydata->SetPoints(newPoints);
>
>     return EXIT_SUCCESS;
> }
>
>
> 2014-04-08 13:58 GMT+02:00 Bill Lorensen <bill.lorensen at gmail.com>:
>
>> Please post a small, complete, compilable example that illustrates your
>> problem.
>>
>> On Tue, Apr 8, 2014 at 3:19 AM, elena bresciani
>> <elena.bresciani87 at gmail.com> wrote:
>> > Thank you guys,
>> >
>> > I tried changing the type of PointNormalArray in vtkDoubleArray
>> >
>> > vtkDoubleArray *PointNormalArray = vtkDoubleArray::SafeDownCast(
>> > polydata->GetPointData()->GetNormals() ) ;
>> >
>> > but I still have the segfault.
>> >
>> > Elena
>> >
>> >
>> > 2014-04-07 19:31 GMT+02:00 Goodwin Lawlor <
>> goodwin.lawlor.lists at gmail.com>:
>> >
>> >> Thanks for that link Shawn and setting me straight (I did day I could
>> be
>> >> wrong ;-))
>> >>
>> >> My logic was that if you had to do:
>> >>
>> >> vtkSmartPointer<vtkPolyData> polydata =
>> >> vtkSmartPointer<vtkPolyData>::New();
>> >>
>> >> then initializing a smart pointer not created with the form on the RHS
>> >> above wouldn't work...
>> >>
>> >> Goodwin
>> >>
>> >>
>> >> On Mon, Apr 7, 2014 at 6:17 PM, Shawn Waldon <swaldon at cs.unc.edu>
>> wrote:
>> >>>
>> >>> Hi Goodwin,
>> >>>
>> >>> It shouldn't be causing the segfault.  That line will create a new
>> smart
>> >>> pointer and set its internal pointer to the reader's output,
>> incrementing
>> >>> the reference count.
>> >>> See
>> >>>
>> http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers#Getting_an_Object_with_a_Smart_Pointer
>> >>> for details.  If the reference increment is unnecessary, then it is
>> still
>> >>> only a small performance gain and not a segfault causing bug.
>> >>>
>> >>> My guess for the segfault is what Bill said: the normals are in a
>> >>> vtkDoubleArray not a vtkFloatArray so SafeDownCast is returning NULL.
>> >>>
>> >>> HTH,
>> >>>
>> >>> Shawn
>> >>>
>> >>>
>> >>> On Mon, Apr 7, 2014 at 1:11 PM, Goodwin Lawlor
>> >>> <goodwin.lawlor.lists at gmail.com> wrote:
>> >>>>
>> >>>> Hi Elena,
>> >>>>
>> >>>> I coud be wrong but I dont think this is correct:
>> >>>>
>> >>>>> vtkSmartPointer<vtkPolyData> polydata = reader->GetOutput();
>> >>>>
>> >>>>
>> >>>> reader->GetOutput() returns a regular pointer to a vtkPolydata not a
>> >>>> smart pointer.
>> >>>>
>> >>>> Try:
>> >>>>
>> >>>> vtkPolyData *polydata = reader->GetOutput();
>> >>>>
>> >>>> instead.
>> >>>>
>> >>>> hth
>> >>>>
>> >>>> Goodwin
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> On Mon, Apr 7, 2014 at 4:00 PM, elena bresciani
>> >>>> <elena.bresciani87 at gmail.com> wrote:
>> >>>>>
>> >>>>> Hello everybody!
>> >>>>>
>> >>>>> I need your help with a segmentation fault error.
>> >>>>> Using gdb I understood where it is generated but I don't know how to
>> >>>>> modify the code to make it run.
>> >>>>>
>> >>>>> Here's the portion of the code that I'm talking about:
>> >>>>>
>> >>>>>
>> >>>>> vtkSmartPointer<vtkPolyData> polydata = reader->GetOutput();
>> >>>>> (the reader is a vtkXMLPolyDataReader)
>> >>>>>
>> >>>>> vtkFloatArray *PointNormalArray = vtkFloatArray::SafeDownCast(
>> >>>>> polydata->GetPointData()->GetNormals() ) ;
>> >>>>>
>> >>>>> for(vtkIdType i = 0; i < PointNormalArray->GetNumberOfTuples(); i++)
>> >>>>> {....}
>> >>>>>
>> >>>>> everytime I call GetNumberOfTuples I have this error so I think the
>> >>>>> problem is on PointNormalArray.
>> >>>>>
>> >>>>> Can somebody help me?
>> >>>>>
>> >>>>> Thanks in advance
>> >>>>>
>> >>>>> Elena
>> >>>>>
>> >>>>> _______________________________________________
>> >>>>> 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
>> >>>>>
>> >>>>
>> >>>>
>> >>>> _______________________________________________
>> >>>> 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
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Shawn Waldon
>> >>> Graduate Research Assistant
>> >>> Department of Computer Science
>> >>> University of North Carolina at Chapel Hill
>> >>> swaldon at cs.unc.edu
>> >>
>> >>
>> >
>> >
>> > _______________________________________________
>> > 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
>> >
>>
>>
>>
>> --
>> Unpaid intern in BillsBasement at noware dot com
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20140408/64a94786/attachment-0001.html>


More information about the vtkusers mailing list