<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[löschen NULL Pointer]]></title><description><![CDATA[<p>in vielen Programme schreibt man</p>
<pre><code>myClass *ptr = new myClass();
...
if (ptr)
   delete ptr;
</code></pre>
<p>d.h. nur dann wenn ptr != 0, wird der gelöscht, aber was passiert bei Löschen eines NULL pointers?<br />
eigentlich NICHTS, d.h. ich kann diese &quot;if()&quot; sparen, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/136917/löschen-null-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 14:58:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136917.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Feb 2006 09:34:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 09:34:31 GMT]]></title><description><![CDATA[<p>in vielen Programme schreibt man</p>
<pre><code>myClass *ptr = new myClass();
...
if (ptr)
   delete ptr;
</code></pre>
<p>d.h. nur dann wenn ptr != 0, wird der gelöscht, aber was passiert bei Löschen eines NULL pointers?<br />
eigentlich NICHTS, d.h. ich kann diese &quot;if()&quot; sparen, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993715</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Tue, 14 Feb 2006 09:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 09:45:25 GMT]]></title><description><![CDATA[<p>Ja... Viele Programme machen auch</p>
<pre><code class="language-cpp">myClass *ptr = NULL;

/* später _vielleicht_ */
ptr = new myClass();

/* immer */
delete ptr;
</code></pre>
<p>Ist denke ich gängige Praxis das so zu machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich hab mir weiterhin zur Angewohnheit gemacht nach _jedem_ delete (ausser in Destruktoren) dem Pointer wieder NULL zuzuweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993729</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 14 Feb 2006 09:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 10:33:53 GMT]]></title><description><![CDATA[<p>Ja, das hab' ich auch gedacht. Daraufhin habe ich mir die Abfrage vor dem delete in einigen Dtors mal gespart. Die Folge war dann eine Runtime-Exception, wenn ich kein Objekt für den Pointer erstellt habe, was für mich allerdings ziemlich unlogisch war. Naja, hab' die Abfrage wieder eingebaut. Im Nachhinein habe ich dann mal hier im Forum gelesen, dass zumindest der VC-Compiler (keine Ahnung welche Version) Pointer wohl mit 0xCDCDCD initialisiert wird, wenn man im Debug-Mode kompiliert. Ich glaube so war's.<br />
Ich verwende zwar Codeblocks mit MinGW, aber ich habe mir das Phenomän dann so erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993773</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Tue, 14 Feb 2006 10:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 10:39:22 GMT]]></title><description><![CDATA[<p>mantiz schrieb:</p>
<blockquote>
<p>Daraufhin habe ich mir die Abfrage vor dem delete in einigen Dtors mal gespart. Die Folge war dann eine Runtime-Exception, wenn ich kein Objekt für den Pointer erstellt habe, was für mich allerdings ziemlich unlogisch war.</p>
</blockquote>
<p>Ist es auch. Die Abfrage bewirkt wirklich nichts. Einen uninitialisierten Zeiger fängt sie auch nicht ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993777</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 14 Feb 2006 10:39:22 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 11:00:02 GMT]]></title><description><![CDATA[<p>delete NULL; ist gültig, da passiert nichts, der Fehler lag bei dir wo anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993798</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Tue, 14 Feb 2006 11:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 12:08:02 GMT]]></title><description><![CDATA[<p>mantiz schrieb:</p>
<blockquote>
<p>Ja, das hab' ich auch gedacht. Daraufhin habe ich mir die Abfrage vor dem delete in einigen Dtors mal gespart. Die Folge war dann eine Runtime-Exception, wenn ich kein Objekt für den Pointer erstellt habe, was für mich allerdings ziemlich unlogisch war. Naja, hab' die Abfrage wieder eingebaut. Im Nachhinein habe ich dann mal hier im Forum gelesen, dass zumindest der VC-Compiler (keine Ahnung welche Version) Pointer wohl mit 0xCDCDCD initialisiert wird, wenn man im Debug-Mode kompiliert. Ich glaube so war's.<br />
Ich verwende zwar Codeblocks mit MinGW, aber ich habe mir das Phenomän dann so erklärt.</p>
</blockquote>
<p>Es gibt einen unterschied zwischen einen uninitialisierten Zeiger und einen Zeiger mit dem Wert 0. Ein nicht initialisierter Zeiger hat einen zufälligen Wert. Wenn ich keinen explizit angebe, steht häufig 0 drin und eine delete funktioniert meistens. Daher setzt VC den Pointer im Debug-Mode auf einen anderen Wert, damit das Programm beim delete möglichst immer abstürzt, damit dieser Fehler zuverlässig auftritt und damit leichter zu finden ist.</p>
<p>Pointer sollte man entweder gar nicht verwenden oder immer initialisieren. Wenn dabei kein Objekt angelegt werden soll, dann auf den Wert 0.</p>
<p>Übringens sollte man wirklich 0 und nicht NULL verwenden. NULL wird in C verwendet und hat unter C++ nichts zu suchen.</p>
<p>Wie ich oben angedeutet habe, sollte man Pointer sowieso vermeiden. Objekte sollten auf dem Stack oder in STL-Containern oder ähnlichem gehalten werden. Wenn es wirklich notwendig ist, sollte man smart pointer einsetzen. Damit wird der Code robust und exceptionsafe und verhindert memory-leaks.</p>
<p>Tommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993845</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Tue, 14 Feb 2006 12:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 12:30:56 GMT]]></title><description><![CDATA[<blockquote>
<p>Übringens sollte man wirklich 0 und nicht NULL verwenden. NULL wird in C verwendet und hat unter C++ nichts zu suchen.</p>
</blockquote>
<p>Na ja, ein/der Grund, NULL nicht zu verwenden, ist die Vermeidung von Makros wie NULL eines ist. Aber d.h. nicht, dass NULL C-only wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993862</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 14 Feb 2006 12:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 12:55:32 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<blockquote>
<p>Übringens sollte man wirklich 0 und nicht NULL verwenden. NULL wird in C verwendet und hat unter C++ nichts zu suchen.</p>
</blockquote>
<p>Na ja, ein/der Grund, NULL nicht zu verwenden, ist die Vermeidung von Makros wie NULL eines ist. Aber d.h. nicht, dass NULL C-only wäre.</p>
</blockquote>
<p>NULL existiert in C++ ebenso wie in C, kein Grund es _nicht_ zu verwenden. Man kann in C++ zwar auch einfach 0 schreiben, aber bei nem NULL weiß jeder, dass es sich hier um nen Zeiger handelt, bei 0 könnte, das auch nur irgendeine integrale Zahl sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993887</guid><dc:creator><![CDATA[Aber]]></dc:creator><pubDate>Tue, 14 Feb 2006 12:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 13:20:50 GMT]]></title><description><![CDATA[<p>In einem guten Code sollte die Semantik der 0 offensichtlich sein.</p>
<p>Im Uebrigen empfiehlt Stroustrup in seinem Buch auch 0 statt NULL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993912</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Tue, 14 Feb 2006 13:20:50 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 13:21:13 GMT]]></title><description><![CDATA[<p>Aber schrieb:</p>
<blockquote>
<p>Man kann in C++ zwar auch einfach 0 schreiben, aber bei nem NULL weiß jeder, dass es sich hier um nen Zeiger handelt, bei 0 könnte, das auch nur irgendeine integrale Zahl sein.</p>
</blockquote>
<p>Falsche Schlussfolgerung. Bei NULL &quot;weiß&quot; jeder, dass es ein Zeiger ist, dabei ist es trotzdem nur eine Zahl, und genau das ist eigentlich der einzige Grund, es nicht zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993913</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 14 Feb 2006 13:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 13:44:48 GMT]]></title><description><![CDATA[<p>Die Winapi ist ein Paradebeispiel, wo eine Unterscheidung zwischen NULL und 0 bei den Parametern die Lesbarkeit drastisch erhöht. Oft hat man dort mehrere Integer und Zeiger bei einem Funktionsaufruf, welche man mit 0 (Integer) und NULL (Zeiger) ausfüllt, da man die Funktionalität nicht braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/993939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/993939</guid><dc:creator><![CDATA[Aber]]></dc:creator><pubDate>Tue, 14 Feb 2006 13:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 19:03:34 GMT]]></title><description><![CDATA[<p>Aber schrieb:</p>
<blockquote>
<p>Die Winapi ist ein Paradebeispiel, wo eine Unterscheidung zwischen NULL und 0 bei den Parametern die Lesbarkeit drastisch erhöht.</p>
</blockquote>
<p>Naja, WinAPI ist ja auch nicht gerade ein Paradebeispiel für Übersichtlichkeit und gutem Stil. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Zumal es keine C++ API ist.<br />
Ich halte übrigens weder von 0 noch NULL in Verbindung mit Nullzeigern recht viel. Deshalb verwende ich eine Nullzeigerklasse. Evtl. kommt im nächsten Standard ja ein null_ptr Schlüsselwort oä. Dann lässt sich zumindest NULL recht einfach ersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994229</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 14 Feb 2006 19:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to löschen NULL Pointer on Tue, 14 Feb 2006 19:13:29 GMT]]></title><description><![CDATA[<p>Wurde zwar schon zigmal gepostet, passt aber grad:<br />
<a href="http://public.research.att.com/~bs/bs_faq2.html#null" rel="nofollow">http://public.research.att.com/~bs/bs_faq2.html#null</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/994236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994236</guid><dc:creator><![CDATA[michba]]></dc:creator><pubDate>Tue, 14 Feb 2006 19:13:29 GMT</pubDate></item></channel></rss>