Ok the solution was embarrasingly simple... When specifying the array size I had specified the number of tuples, where I was supposed to specify numTuples*numComponents
Thanks for the help anyway. Bruce On Wed, 22 Jul 2015 at 14:28 Bruce Jones <[email protected]> wrote: > Hey Guys, > > I have created a minimum working example (attached). This example is built > as a paraview plugin, build environment specified below. The plugin takes > point data as input (sample attached), and just does the memory allocation > and creation of output arrays as I have previously described. On my > machine, as soon as I apply the filter, paraview crashes. Commenting line > 107 in vtkHeapCorruption.cxx allows the filter to run, but the output is > then limited to single component arrays, where some of the input arrays > have 3 or 9 components. > > QT 4.8.6, Visual Studio 2010, Built against Paraview commit SHA1 > ID: 70155c17cfe7c2f547bb25ddb859a65518896ee3 > > On Wed, 22 Jul 2015 at 11:21 Bruce Jones <[email protected]> > wrote: > >> Thanks Berk, >> >> I have tried with both zero and 1 as the save argument and am getting the >> same behavior. As before, if I comment the SetNumberOfComponents call (or >> set number of components to 1) everything works, except I only have single >> component arrays in the output. >> >> I'm going to put together a minimum working example with the issue this >> afternoon so that I can show you guys in more detail. >> >> Cheers, >> Bruce >> >> On Wed, 22 Jul 2015 at 11:09 Berk Geveci <[email protected]> wrote: >> >>> 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
