<?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[dangling pointer]]></title><description><![CDATA[<p>Hallo an alle.<br />
Weiß jemand zufälligerweise, wie man überprüfen kann, ob ein pointer gültig ist oder nicht?</p>
<pre><code class="language-cpp">void foo() {
   void* p = new int();
   delete p;
   // p nicht auf NULL setzen
   // p ist ab hier nicht mehr gültig
}
</code></pre>
<p>wenn ich im oberen beispiel p = 0 setze ist alles in ordnung, da man ihn ja auf 0 prüfen kann.<br />
Kann man überhaupt im standard C++ solche Überprüfungen machen, ob das ding ungültig ist, wenn ich beispielsweise irgendwo später auf diesen zugreifen möchte?</p>
<p>Danke in voraus</p>
<p>Grüße<br />
Dimitrij</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147512/dangling-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 00:17:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147512.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 May 2006 14:57:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 14:57:19 GMT]]></title><description><![CDATA[<p>Hallo an alle.<br />
Weiß jemand zufälligerweise, wie man überprüfen kann, ob ein pointer gültig ist oder nicht?</p>
<pre><code class="language-cpp">void foo() {
   void* p = new int();
   delete p;
   // p nicht auf NULL setzen
   // p ist ab hier nicht mehr gültig
}
</code></pre>
<p>wenn ich im oberen beispiel p = 0 setze ist alles in ordnung, da man ihn ja auf 0 prüfen kann.<br />
Kann man überhaupt im standard C++ solche Überprüfungen machen, ob das ding ungültig ist, wenn ich beispielsweise irgendwo später auf diesen zugreifen möchte?</p>
<p>Danke in voraus</p>
<p>Grüße<br />
Dimitrij</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059639</guid><dc:creator><![CDATA[dadrus]]></dc:creator><pubDate>Wed, 17 May 2006 14:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 14:59:57 GMT]]></title><description><![CDATA[<p>Nein, eine solche Überprüfung ist meines Wissens nach nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059642</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 17 May 2006 14:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 15:01:25 GMT]]></title><description><![CDATA[<p>Nein kannst Du nicht.</p>
<p>Aber das Ding auf 0 zu setzen sollte nicht das Problem sein oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059643</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 17 May 2006 15:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 15:10:11 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber das Ding auf 0 zu setzen sollte nicht das Problem sein oder?</p>
</blockquote>
<p>Das nicht.<br />
Ich habe mir eine kleine hilfklasse geschrieben, die wie die auto_ptr funzt, nur zusätzlich noch runtime exceptions schmeißt, wenn irgendwelche speicherprobleme auftreten. Bsp. wenn mann auf einem null pointer zugreift oder ähnlich. Das einzige was ihr momentan noch fehlt, ist halt solche überprüfung.</p>
<p>Beispiel wäre:</p>
<pre><code class="language-cpp">void foo() {
   mem&lt;Object&gt; ptr_o = new Object();
   ptr_o-&gt;fooAufObjectKlasse();
   // in der Art.
   // mache ich abe so was:
   ptr_o = NULL;
   ptr_o-&gt;fooAufObjectKlasse(); // hier wird eine exception geschmissen. 
   //NullPointer - wie in java :)
   // würde ich abe irgendwie sowas machen: vorausgesetzt ptr_o hält noch einen
   // gültigen zeiger
   delete ptr_o.ptr(); // Jetzt hält ptr_o einen ungültigen zeiger auf Object
   // wenn ich jetzt aufrufe
   ptr_o-&gt;fooAufObjectKlasse(); 
   // dann wird keine meiner exceptions geschmissen, sondern abgekackt, da der 
   // innere pointer nicht gültig ist. :(
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1059652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059652</guid><dc:creator><![CDATA[dadrus]]></dc:creator><pubDate>Wed, 17 May 2006 15:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 15:14:48 GMT]]></title><description><![CDATA[<p>Wenn es nur darum geht das für Speicherbereiche zu überprüfen, die <strong>garantiert</strong> irgendwann mal Dir gehört haben, könntest Du den globalen op delete überschreiben und alle Adressen, die Du irgendwann mal gelöscht hast in eine Liste packen (aber bitte nur zur Debug-Time <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) und diese dann beim Zugriff durchsuchen.</p>
<p>Von der Sprache her direkt ist das nicht möglich, nicht umsonst haben Speicherdebugger immer irgendwelche Performance-Nachteile (weil sie eben in Listen schauen müssen oder sich div. anderer Tricks bedienen). Electric Fence (Linux) zum Beispiel schützt Speicherbereiche die mal benutzt wurden sowie die Bereiche davor und dahinter durch Invalid Pages.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059657</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 17 May 2006 15:14:48 GMT</pubDate></item><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 15:28:20 GMT]]></title><description><![CDATA[<p>Frage wäre an dieser Stelle, was dann passiert, wenn zufälligerweise derselbe speicherbereich wieder für etwas anderes gültig wird?</p>
<p>Und abgesehen davon wird es mir dann zu langsam.<br />
Danke aber trotzdem für den tip</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059662</guid><dc:creator><![CDATA[dadrus]]></dc:creator><pubDate>Wed, 17 May 2006 15:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to dangling pointer on Wed, 17 May 2006 16:14:28 GMT]]></title><description><![CDATA[<p>dadrus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void foo() {
   void* p = new int();
   delete p;
   // p nicht auf NULL setzen
   // p ist ab hier nicht mehr gültig
}
</code></pre>
</blockquote>
<p>das ist in jedem falle undefiniertes verhalten. delete auf einen void* zeiger ist unzulässig (und unsinnig, es gibt ja auch kein new void)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1059691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1059691</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 17 May 2006 16:14:28 GMT</pubDate></item></channel></rss>