The solution is in the documentation: // This method lets the user specify data to be held by the array. The // array argument is a pointer to the data. size is the size of the // array supplied by the user. Set save to 1 to keep the class from // deleting the array when it cleans up or reallocates memory. The class // uses the actual array provided; it does not copy the data from the // suppled array. If specified, the delete method determines how the data // array will be deallocated. If the delete method is // VTK_DATA_ARRAY_FREE, free() will be used. If the delete method is // DELETE, delete[] will be used. The default is FREE.
You are passing 0 for the "save" argument, which means that VTK will delete the array when the VTK array object is deleted, which would cause a double delete/free. Use 1 as the second argument of SetArray() if you are managing the memory. Also, make sure that the VTK array is not used after you free your array. Best, -berk On Wed, Jul 22, 2015 at 9:56 AM, Bruce Jones <[email protected]> wrote: > Hi Guys, > > I have just tried it as you suggested, doing SetNumberOfComponents then > SetArray, without doing SetNumberOfTuples. Unfortunately I am still getting > the same behaviour. > > Cheers, > Bruce > > On Wed, 22 Jul 2015 at 09:44 Berk Geveci <[email protected]> wrote: > >> Actually, don't call SetNumberOfTuples() at all if you are using >> SetArray(). It will unnecessarily allocate memory if you call it before >> SetArray(). >> >> -berk >> >> On Wed, Jul 22, 2015 at 9:40 AM, Shawn Waldon <[email protected]> >> wrote: >> >>> Hi Bruce, >>> >>> SetNumberOfTuples reallocates the internal datastructure of the data >>> array to be the new required size based on the new number of components and >>> number of tuples. This (combined with trying to clean up the old data from >>> SetArray) may be causing the heap corruption you are seeing. Try setting >>> the number of components and number of tuples before adding the data to the >>> array. >>> >>> HTH, >>> Shawn >>> >>> On Tue, Jul 21, 2015 at 1:37 PM, Bruce Jones < >>> [email protected]> wrote: >>> >>>> Hi Cory, >>>> >>>> Sorry for the delayed response, I've hit another more serious bug which >>>> has been diverting my attention from this. >>>> >>>> Thanks for the state file, I haven't got it to work as I don't have >>>> numpy set up, but I have also got this working with 9 component arrays in >>>> paraview using a python script. However, I am now trying to port my python >>>> plugin to c++ which is where I am seeing the error. >>>> >>>> In my plugin I want to output a vtkarray for each vtkarray in the input >>>> dataset. The values in the output vtkarrays are interpolated from those in >>>> the input vtkarrays. Rather than working directly on vtkarray objects, I am >>>> allocating c++ arrays for each vtkarray, performing the interpolation, then >>>> creating vtkDoubleArrays and using SetArray to pass a pointer to my >>>> allocated c++ arrays to the output vtkarrays. The code for setting up the >>>> output vtkarrays is roughly as follows >>>> >>>> vtkPointData *pointData = input->GetPointData(); >>>> vtkDataArray *dArray = pointData->GetArray(i); >>>> vtkDoubleArray *vtkDArrayAve = vtkDoubleArray::New(); >>>> vtkDArrayAve->SetName(dArray->GetName()); >>>> vtkDArrayAve->SetArray(dArraysAve[i],hgrid->GetTotalCells(),0); >>>> vtkDArrayAve->SetNumberOfComponents(numComponents[i]); >>>> vtkDArrayAve->SetNumberOfTuples(hgrid->GetTotalCells()); >>>> output->GetPointData()->AddArray(vtkDArrayAve); >>>> >>>> dArraysAve is an array of pointers pointing to my c++ arrays >>>> hgrid->GetTotalCells() returns the number of data points for my output >>>> >>>> I also have another mode of operation for this plugin, where I perform >>>> the interpolation differently, in that function, if I make the call to >>>> SetNumberOfComponents() some heap corruption occurs and I get a segfault >>>> when I try to subsequently free my c++ arrays. Commenting out the call to >>>> SetNumberOfComponents avoids the segfault, but then I am limited to single >>>> component arrays. This is the more serious bug I mentioned, initially I >>>> figured they were unrelated, but I can't deny the number of components >>>> coincidence. >>>> >>>> Cheers, >>>> Bruce >>>> >>>> On Thu, 16 Jul 2015 at 14:41 Cory Quammen <[email protected]> >>>> wrote: >>>> >>>>> Hi Bruce, >>>>> >>>>> I have attached a ParaView state file with a Programmable Source that >>>>> produces a vtkPolyData with 100 random points and a point data array with >>>>> 9 >>>>> components. It seems to display the various component ranges just fine. >>>>> >>>>> Best, >>>>> Cory >>>>> >>>>> On Thu, Jul 16, 2015 at 11:14 AM, Cory Quammen < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi Bruce, >>>>>> >>>>>> I haven't seen this, but ParaView may be interpreting this array as a >>>>>> tensor field. Do you have a smallish test data file that you can share >>>>>> that >>>>>> shows the problem? >>>>>> >>>>>> Thanks, >>>>>> Cory >>>>>> >>>>>> On Sat, Jul 11, 2015 at 11:14 AM, Bruce Jones < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> I am creating vtkDoubleArrays based on averaging some input data to >>>>>>> a reduced set of points. The input data includes various vtk arrays >>>>>>> which >>>>>>> have 1, 3 and 9 components. >>>>>>> >>>>>>> After averaging, I am writing the data to c++ arrays, and creating a >>>>>>> new vtkDoubleArray using the SetArray() function to pass the c++ arrays. >>>>>>> This works fine for 1 and 3 component arrays, however for the 9 >>>>>>> component >>>>>>> arrays paraview shows that every element is set to 0. >>>>>>> >>>>>>> If I hardcode it so that 9 component arrays become 3 component >>>>>>> arrays (reading only the first 3 components from the input array), then >>>>>>> I >>>>>>> get the correct data for the first 3 components, though I obviously need >>>>>>> the other 6 components in the end. >>>>>>> >>>>>>> Has anyone encountered this before? >>>>>>> >>>>>>> Cheers, >>>>>>> Bruce >>>>>>> >>>>>>> _______________________________________________ >>>>>>> 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 ParaView Wiki at: >>>>>>> http://paraview.org/Wiki/ParaView >>>>>>> >>>>>>> Search the list archives at: http://markmail.org/search/?q=ParaView >>>>>>> >>>>>>> Follow this link to subscribe/unsubscribe: >>>>>>> http://public.kitware.com/mailman/listinfo/paraview >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Cory Quammen >>>>>> R&D Engineer >>>>>> Kitware, Inc. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Cory Quammen >>>>> R&D Engineer >>>>> Kitware, Inc. >>>>> >>>> >>>> _______________________________________________ >>>> 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 ParaView Wiki at: >>>> http://paraview.org/Wiki/ParaView >>>> >>>> Search the list archives at: http://markmail.org/search/?q=ParaView >>>> >>>> Follow this link to subscribe/unsubscribe: >>>> http://public.kitware.com/mailman/listinfo/paraview >>>> >>>> >>> >>> _______________________________________________ >>> 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 ParaView Wiki at: >>> http://paraview.org/Wiki/ParaView >>> >>> Search the list archives at: http://markmail.org/search/?q=ParaView >>> >>> Follow this link to subscribe/unsubscribe: >>> http://public.kitware.com/mailman/listinfo/paraview >>> >>> >>
_______________________________________________ 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 ParaView Wiki at: http://paraview.org/Wiki/ParaView Search the list archives at: http://markmail.org/search/?q=ParaView Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/paraview
