<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Consolas'; font-size:11pt; font-weight:400; font-style:normal;">On Thursday 15 January 2009, Dominik Haumann wrote:<br>
> Hi,<br>
><br>
> according to [1] this change is wrong:<br>
> >>         BitSet & BitSet::operator = (const BitSet & bs)<br>
> >>         {<br>
> >> -               if (data)<br>
> >> -                       delete [] data;<br>
> >> +               delete [] data<br>
><br>
> Still, it seems to be unclear whether that's sill an issue.<br>
> Does anyone have an idea?<br>
><br>
> Dominik<br>
><br>
> [1]<br>
> http://techbase.kde.org/Development/Tutorials/Common_Programming_Mistakes#N<br>
>ULL_pointer_issues<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>The way delete [] works is that the size of the array is embedded somewhere in the array to be deleted (handled by the corresponding new[]).  delete[] uses this information to free the array appropriately.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Apparently the "recent Solaris compiler" does not check for 0 before trying to find the hidden array length.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Section 5.3.5 of the C++ standard seems to define what happens when delete is called, and says that delete doing nothing for null pointers applies for both delete and delete[].  So the Solaris compiler has a bug.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Whether or not we want to work around it is a different story but delete[] on a null pointer is perfectly valid C++.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Regards,<br>
 - Michael Pyne</p></body></html>