<div dir="ltr">But it&#39;s fixed now, right? Or is this another leak that you are reporting now...?<div><br><br><div class="gmail_quote">On Sun, Aug 24, 2008 at 9:51 PM, Takuya OSHIMA <span dir="ltr">&lt;<a href="mailto:oshima@eng.niigata-u.ac.jp">oshima@eng.niigata-u.ac.jp</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Thanks, it did fix the problem. Indeed, zero-byte allocation does not<br>
necessarily return a null pointer. I got a leak also on Linux from<br>
this test program<br>
<br>
#include &lt;iostream&gt;<br>
int main()<br>
{ std::cout &lt;&lt; static_cast&lt;void *&gt;(new char[0]) &lt;&lt; std::endl; return 0; }<br>
<br>
as attached below (0x58fc030 is the returned address). I omit the full<br>
log but similarly, the &quot;leaks&quot; tool on OS X somehow reported a 16-byte<br>
leak from the zero-byte allocation.<br>
<br>
&gt; valgrind --leak-check=full ./test<br>
==18020== Memcheck, a memory error detector.<br>
==18020== Copyright (C) 2002-2007, and GNU GPL&#39;d, by Julian Seward et al.<br>
==18020== Using LibVEX rev 1804, a library for dynamic binary translation.<br>
==18020== Copyright (C) 2004-2007, and GNU GPL&#39;d, by OpenWorks LLP.<br>
==18020== Using valgrind-3.3.0, a dynamic binary instrumentation framework.<br>
==18020== Copyright (C) 2000-2007, and GNU GPL&#39;d, by Julian Seward et al.<br>
==18020== For more details, rerun with: -v<br>
==18020==<br>
0x58fc030<br>
==18020==<br>
==18020== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 1)<br>
==18020== malloc/free: in use at exit: 0 bytes in 1 blocks.<br>
==18020== malloc/free: 1 allocs, 0 frees, 0 bytes allocated.<br>
==18020== For counts of detected errors, rerun with: -v<br>
==18020== searching for pointers to 1 not-freed blocks.<br>
==18020== checked 164,336 bytes.<br>
==18020==<br>
==18020== 0 bytes in 1 blocks are definitely lost in loss record 1 of 1<br>
==18020== &nbsp; &nbsp;at 0x4C2488C: operator new[](unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)<br>
==18020== &nbsp; &nbsp;by 0x40090B: main (in /home/ohshima/tmp/test)<br>
==18020==<br>
==18020== LEAK SUMMARY:<br>
==18020== &nbsp; &nbsp;definitely lost: 0 bytes in 1 blocks.<br>
==18020== &nbsp; &nbsp; &nbsp;possibly lost: 0 bytes in 0 blocks.<br>
==18020== &nbsp; &nbsp;still reachable: 0 bytes in 0 blocks.<br>
==18020== &nbsp; &nbsp; &nbsp; &nbsp; suppressed: 0 bytes in 0 blocks.<br>
<div class="Ih2E3d"><br>
Regards,<br>
Takuya<br>
<br>
Takuya OSHIMA, Ph.D.<br>
Faculty of Engineering, Niigata University<br>
8050 Ikarashi-Ninocho, Nishi-ku, Niigata, 950-2181, JAPAN<br>
<br>
<br>
</div>From: &quot;Moreland, Kenneth&quot; &lt;<a href="mailto:kmorel@sandia.gov">kmorel@sandia.gov</a>&gt;<br>
Subject: RE: [Paraview] a leak from vtkCommunicator::Broadcast(vtkDataArray *, int)<br>
Date: Fri, 22 Aug 2008 12:27:42 -0600<br>
<div class="Ih2E3d"><br>
&gt; I&#39;m confused, too. &nbsp;Perhaps new is doing something funny where when you allocate an array of size 0, it actual creates a buffer rather than just returning NULL.<br>
&gt;<br>
&gt; I just checked in a change that does not call new if nameLength is 0. &nbsp;Let me know if there are still problems.<br>
&gt;<br>
&gt; -Ken<br>
&gt;<br>
&gt; ________________________________<br>
&gt; From: David Cole [mailto:<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>]<br>
&gt; Sent: Friday, August 22, 2008 9:47 AM<br>
&gt; To: Moreland, Kenneth<br>
&gt; Subject: Fwd: [Paraview] a leak from vtkCommunicator::Broadcast(vtkDataArray *, int)<br>
&gt;<br>
&gt; cvs annotate says you wrote most of this method... Would you mind fixing it &quot;the right way&quot;...?<br>
&gt;<br>
&gt; It looks to me like if it goes into the LocalProcessId != srcProcessId chunks that nameLength is always 0 anyhow and we should avoid allocating a 0 byte buffer..... (But, in which case, name is always going to be NULL for this case, so there shouldn&#39;t even be a SetName call when this condition is true....?) I&#39;m confused.<br>

&gt;<br>
&gt;<br>
&gt; Thanks,<br>
&gt; David<br>
&gt;<br>
&gt; ---------- Forwarded message ----------<br>
</div><div class="Ih2E3d">&gt; From: Takuya OSHIMA &lt;<a href="mailto:oshima@eng.niigata-u.ac.jp">oshima@eng.niigata-u.ac.jp</a>&lt;mailto:<a href="mailto:oshima@eng.niigata-u.ac.jp">oshima@eng.niigata-u.ac.jp</a>&gt;&gt;<br>

&gt; Date: Fri, Aug 22, 2008 at 4:46 AM<br>
&gt; Subject: [Paraview] a leak from vtkCommunicator::Broadcast(vtkDataArray *, int)<br>
</div><div class="Ih2E3d">&gt; To: <a href="mailto:paraview@paraview.org">paraview@paraview.org</a>&lt;mailto:<a href="mailto:paraview@paraview.org">paraview@paraview.org</a>&gt;<br>
&gt;<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; I got a leak from vtkCommunicator::Broadcast(vtkDataArray *, int)<br>
&gt; detected by the &quot;leaks&quot; tool on OS X. It looks like it&#39;s because the<br>
&gt; delete operator at line 1004 of vtkCommunicator.cxx is enclosed by &quot;if<br>
&gt; (nameLength &gt; 0),&quot; while the new operator at line 984 is not (the leak<br>
&gt; disappears if I set a name for the vtkDataArray).<br>
&gt;<br>
&gt; Regards,<br>
&gt; Takuya<br>
&gt;<br>
&gt; Takuya OSHIMA, Ph.D.<br>
&gt; Faculty of Engineering, Niigata University<br>
&gt; 8050 Ikarashi-Ninocho, Nishi-ku, Niigata, 950-2181, JAPAN<br>
&gt; _______________________________________________<br>
&gt; ParaView mailing list<br>
</div>&gt; <a href="mailto:ParaView@paraview.org">ParaView@paraview.org</a>&lt;mailto:<a href="mailto:ParaView@paraview.org">ParaView@paraview.org</a>&gt;<br>
<div><div></div><div class="Wj3C7c">&gt; <a href="http://www.paraview.org/mailman/listinfo/paraview" target="_blank">http://www.paraview.org/mailman/listinfo/paraview</a><br>
&gt;<br>
_______________________________________________<br>
ParaView mailing list<br>
<a href="mailto:ParaView@paraview.org">ParaView@paraview.org</a><br>
<a href="http://www.paraview.org/mailman/listinfo/paraview" target="_blank">http://www.paraview.org/mailman/listinfo/paraview</a><br>
</div></div></blockquote></div><br></div></div>