天天看点

对指针调用delete之后要记得把指针赋值为nullptr

对指针调用delete之后要记得把指针赋值为nullptr

否则,如果这个指针被重复delete,会死机。

<code>#include &lt;iostream&gt;</code>

<code>using</code> <code>std::cout;</code>

<code>using</code> <code>std::endl;</code>

<code>using</code> <code>std::ostream;</code>

<code>class</code> <code>Tree {</code>

<code>  </code><code>int</code> <code>height;</code>

<code>public</code><code>:</code>

<code>  </code><code>Tree(</code><code>int</code> <code>treeHeight) : height(treeHeight) {</code>

<code>    </code><code>cout &lt;&lt; __func__ &lt;&lt; </code><code>"(), this = "</code> <code>&lt;&lt; </code><code>this</code> <code>&lt;&lt; endl;</code>

<code>  </code><code>}</code>

<code>  </code><code>~Tree() { cout &lt;&lt; </code><code>"~Tree()\n"</code><code>; }</code>

<code>#if 0 </code>

<code>  </code><code>friend</code> <code>ostream&amp;</code>

<code>  </code><code>operator&lt;&lt;(ostream&amp; os, </code><code>const</code> <code>Tree* t) {</code>

<code>    </code><code>return</code> <code>os &lt;&lt; </code><code>"Tree height is: "</code>

<code>              </code><code>&lt;&lt; t-&gt;height &lt;&lt; endl;</code>

<code>#else</code>

<code>  </code><code>operator&lt;&lt;(ostream&amp; os, </code><code>const</code> <code>Tree&amp; t) {</code>

<code>              </code><code>&lt;&lt; t.height &lt;&lt; endl;</code>

<code>#endif</code>

<code>}; </code>

<code>int</code> <code>main() {</code>

<code>  </code><code>Tree* t = </code><code>new</code> <code>Tree(40);</code>

<code>  </code><code>delete</code> <code>t;</code>

<code>  </code><code>//t = nullptr;</code>

<code>}</code>

运行结果:

frank@userver:~/project/test/cpp/new_del$ ./a.out 

Tree(), this = 0x13b2010

~Tree()

*** Error in `./a.out': double free or corruption (fasttop): 0x00000000013b2010 ***

Aborted (core dumped)

      本文转自FrankNie0101 51CTO博客,原文链接:http://blog.51cto.com/frankniefaquan/1936943,如需转载请自行联系原作者