<?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[Gültigkeit von Zeigern überprüfen]]></title><description><![CDATA[<p>hallo,</p>
<p>ist es möglich die Gültigkeit von Zeigern zu überprüfen?<br />
also zu prüfen, ob der Zugriff auf das, worauf der Zeiger zeigt, zulässig ist?</p>
<p>ist zum Beispiel wichtig, wenn ich Speicher mit delete wieder freigebe, aber den Zeiger nicht auf NULL setze.<br />
dann nützt mir ja die Überprüfung auf NULL auch nichts...</p>
<p>mein Gedanke dazu war ja ein try-Block, in dem spaßenshalber ein Zugriff auf den Speicher stattfindet.<br />
wenn alles klappt, ist der Zeiger gültig, ansonsten eben nicht.</p>
<p>Jetzt hab ich aber die Frage: wird da überhaupt eine Exception geworfen, oder wird das Programm direkt vom System beendet,<br />
wenn sowas passiert?<br />
Und wenn es funktioniert, würde es dann weitergehend auch unter C funktionieren?<br />
ich meine gehört zu haben, dass es unter C gar keine Exceptions gibt.</p>
<p>Gibt es evtl noch eine andere Möglichkeit der Überprüfung?</p>
<p>schonmal thx im voraus</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202905/gültigkeit-von-zeigern-überprüfen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 00:09:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202905.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Jan 2008 16:32:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gültigkeit von Zeigern überprüfen on Wed, 16 Jan 2008 16:32:43 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>ist es möglich die Gültigkeit von Zeigern zu überprüfen?<br />
also zu prüfen, ob der Zugriff auf das, worauf der Zeiger zeigt, zulässig ist?</p>
<p>ist zum Beispiel wichtig, wenn ich Speicher mit delete wieder freigebe, aber den Zeiger nicht auf NULL setze.<br />
dann nützt mir ja die Überprüfung auf NULL auch nichts...</p>
<p>mein Gedanke dazu war ja ein try-Block, in dem spaßenshalber ein Zugriff auf den Speicher stattfindet.<br />
wenn alles klappt, ist der Zeiger gültig, ansonsten eben nicht.</p>
<p>Jetzt hab ich aber die Frage: wird da überhaupt eine Exception geworfen, oder wird das Programm direkt vom System beendet,<br />
wenn sowas passiert?<br />
Und wenn es funktioniert, würde es dann weitergehend auch unter C funktionieren?<br />
ich meine gehört zu haben, dass es unter C gar keine Exceptions gibt.</p>
<p>Gibt es evtl noch eine andere Möglichkeit der Überprüfung?</p>
<p>schonmal thx im voraus</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437827</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Wed, 16 Jan 2008 16:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeit von Zeigern überprüfen on Wed, 16 Jan 2008 17:21:34 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>Jetzt hab ich aber die Frage: wird da überhaupt eine Exception geworfen, oder wird das Programm direkt vom System beendet,<br />
wenn sowas passiert?</p>
</blockquote>
<p>Das ist schlicht und einfach undefiniert. Aber dass du eine C++ - Exception bekommst ist extrem unwarscheinlich <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>
<blockquote>
<p>Und wenn es funktioniert, würde es dann weitergehend auch unter C funktionieren?<br />
ich meine gehört zu haben, dass es unter C gar keine Exceptions gibt.</p>
</blockquote>
<p>Exceptions gibt's so nur in C++</p>
<blockquote>
<p>Gibt es evtl noch eine andere Möglichkeit der Überprüfung?</p>
</blockquote>
<p>std::auto_ptr&lt;&gt;<br />
std::tr1::shared_ptr&lt;&gt;<br />
std::tr1::weak_ptr&lt;&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437875</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Wed, 16 Jan 2008 17:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeit von Zeigern überprüfen on Wed, 16 Jan 2008 17:27:16 GMT]]></title><description><![CDATA[<p>Der Wert eines Zeigerobjekts verweist entweder auf ein Objekt, ist ein Nullzeiger oder ist singulär (== verweist <em>nicht</em> auf ein Objekt oder ist Null). Der Zugriff auf den Wert eines singlären Zeigers ist undefiniert. <em>Un</em>definiert bedeutet gerade, dass es <em>keine</em> (durch C++ definierte) Möglichkeit gibt, diesen etwas mit diesem Wert anzufangen. Das schließt dann logischerweise die Überprüfung auf Gültigkeit (was eigentlich schon in sich widersprüchlich ist) ein, denn das Werfen einer Exception (das kommt im Übrigen noch aus anderen Gründen nicht in Frage) ist alles andere als etwas, mit dem man nichts anfangen kann.<br />
Es wird auch gerne übersehen, dass dieses Undefiniert-Sein nicht nur eine Einschränkung hinsichtlich der Verwendung von Zeigern darstellt (es geht gerade nicht - oder nicht nur - um irgendwelche exotischen Systeme, die vielleicht wegen Traps aussteigen), vielmehr ist das auch eine Voraussetzung für viele Formen der Optimierung. z.B. (sinnfrei):</p>
<pre><code class="language-cpp">void foo();
int bar()
{
    int x = 42;
    foo();
    return x;
}
int main()
{
    cout &lt;&lt; bar();
}
</code></pre>
<p>x ist hier eine lokale Variable, die nie Aliase hat, daher muss dieses Programm stets 42 ausgeben. Das wäre nicht gegeben, wenn foo auf irgendwelche undefinierte Weise (es gibt mit Sicherheit keine wohldefinierte Möglichkeit) per wilder Zeigermanipulationen auf x zugreifen würde (nat. kann die Plattform zusätzliche Möglichkeiten bieten, in denen dieses konkrete Beispiel versagen würde).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1437878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1437878</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Jan 2008 17:27:16 GMT</pubDate></item></channel></rss>