Import 2017-06-07 23:51:09: master b2dc2546

Author Committer Branch Timestamp Parent
jcfr jcfr master 2014-07-18 03:41:16 master ae70ba6b
Changeset

BUG: Fix memory initialization in vtkMRMLDiffusionWeightedVolumeNode

This commits fixes a problem discovered while running the test
vtkMRMLDiffusionWeightedVolumeNodeTest1 through valgrind. It
ensures that each time the number of gradient is set, the DiffusionGradients
and BValues double arrays are initialized with zeros. To do so,
a protected function "SetNumberOfGradientsInternal" is introduced, it is
doesn't invoke the modified event, set the double array value to zeros.

The redundant ivar "NumberOfGradients" has also been removed. Instead
the function "GetNumberOfGradients" return the number of tuples in
the DiffusionGradients array.

[...]

Conditional jump or move depends on uninitialised value(s)
==32492== at 0x23B631D3: __printf_fp (printf_fp.c:404)
==32492== by 0x23B62A9B: vfprintf (vfprintf.c:1654)
==32492== by 0x23B875A4: vsnprintf (vsnprintf.c:119)
==32492== by 0x2367E01F: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.18)
==32492== by 0x23684455: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_float<double>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, char, double) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.18)
==32492== by 0x2368473F: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, double) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.18)
==32492== by 0x2368FA34: std::ostream& std::ostream::_M_insert<double>(double) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.18)
==32492== by 0x5143A38: vtkMRMLDiffusionWeightedVolumeNode::PrintSelf(std::ostream&, vtkIndent) (vtkMRMLDiffusionWeightedVolumeNode.cxx:394)
==32492== by 0x17BF4BD7: vtkObjectBase::Print(std::ostream&) (vtkObjectBase.cxx:149)
==32492== by 0x4B78B4: vtkMRMLDiffusionWeightedVolumeNodeTest1(int, char**) (vtkMRMLDiffusionWeightedVolumeNodeTest1.cxx:24)
==32492== by 0x4729AC: main (MRMLCoreCxxTests.cxx:616)

[...]

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23457 3bd1e089-480b-0410-8dfb-8563597acbee

mod - Libs/MRML/Core/vtkMRMLDiffusionWeightedVolumeNode.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLDiffusionWeightedVolumeNode.h Diff File