[vtk-developers] Mac java not returning zero-initialized objects
Bill Lorensen
bill.lorensen at gmail.com
Fri Feb 25 08:13:01 EST 2011
Are you positive that a large, dynamically allocated block of memory
is always zeroed in Java?
On Fri, Feb 25, 2011 at 1:11 AM, Mark Roden <mmroden at gmail.com> wrote:
> Thanks to everyone on this.
>
> The solution by Dean fixed the issue.
>
> I do want to stress, though, that this is a big difference between
> C/C++ and Java-- Java's guarantee of default initial values means that
> many programmers rely on those defaults. I think quite a few people
> (myself included) will see stability problems because they will (and I
> have) use that guarantee to assume that objects are initialized to
> zeros, and therefore don't perform a secondary memory-wiping step once
> an object has been allocated. I don't pretend to know how hard it
> would be to fix the wrapping, but it does mean that vtk's java
> libraries do not conform to a basic portion of the java standard.
>
> Just raising the issue.
>
> Thanks for the help,
> Mark
>
> On Thu, Feb 24, 2011 at 8:42 AM, David Gobbi <david.gobbi at gmail.com> wrote:
>> Hi Mark,
>>
>> In VTK, when vtkDataArrays are allocated they are not initialized.
>> Since VTK data array allocation occurs everywhere in VTK, often
>> several layers deep, it would be impossible for the Java wrappers
>> to know when a vtkDataArray is allocated. Someone could add an
>> exception specifically for vtkImageData::AllocateScalars(), but that
>> would just be scratching an itch.
>>
>> You'll have to find some way to clear the scalars. Try Dean's suggestion
>> to see if it works for you.
>>
>> - David
>>
>>
>> On Thu, Feb 24, 2011 at 9:17 AM, Mark Roden <mmroden at gmail.com> wrote:
>>> I've found what I think is an interesting bug in the Java wrapping.
>>>
>>> According to the spec
>>> (http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.12.5),
>>> values in java should be initialized to zero. However, when I create
>>> a new vtkImageData object, the contents are not zero.
>>>
>>> For instance, this method, used to make a mask on top of an existing
>>> vtkImageData object:
>>>
>>> public vtkImageData getBlankBinaryData(vtkImageData inImage){
>>> vtkImageData blankImage = new vtkImageData();
>>> int [] extent = inImage.GetWholeExtent();
>>> double[] origin = inImage.GetOrigin();
>>> double[] spacing = inimage.GetSpacing();
>>> blankImage.SetExtent(extent);
>>> blankImage.SetOrigin(origin);
>>> blankImage.SetSpacing(spacing);
>>> blankImage.SetScalarTypeToUnsignedChar();
>>> blankImage.AllocateScalars();
>>> return blankImage;
>>> }
>>>
>>> That above code returns an image that is set to zero on the PC, but
>>> contains a wide variety of values on the mac.
>>>
>>> This seems like an oversight in the wrapper. What should I do to
>>> guarantee that a new vtkImageData contains only zeros?
>>>
>>> Thanks,
>>> Mark
>>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
More information about the vtk-developers
mailing list