<?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[Prüfen ob Zeiger auf ein Speicherbereich zeigen]]></title><description><![CDATA[<p>Hi, kann mir das jemand erklären?</p>
<pre><code class="language-cpp">&quot;main.cpp&quot;
#include &lt;string&gt;
using namespace std;

int main()
{
    try
    {
        string str=&quot;Hallo&quot;;
        throw(str.c_str())
    }
    catch(const char* str)
    {
        cout&lt;&lt;str&lt;&lt;endl; //Warum wird hier noch immer was angezeigt,
                         //obwohl der string seinen Sichtbarkeitsbereich
                         //verlassen hat?
    }
}
</code></pre>
<p>Ich habe das Gleiche mit einem von mir new angelegten Speicherbereich gemacht, doch bei mir wurde nichts angezeigt.<br />
Ich hab das Objekt statisch gemacht und es wurde angezeigt.</p>
<p>Warum geht es aber bei string, das Objekt ist nicht statisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241761/prüfen-ob-zeiger-auf-ein-speicherbereich-zeigen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 07:47:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241761.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 May 2009 17:51:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 17:51:49 GMT]]></title><description><![CDATA[<p>Hi, kann mir das jemand erklären?</p>
<pre><code class="language-cpp">&quot;main.cpp&quot;
#include &lt;string&gt;
using namespace std;

int main()
{
    try
    {
        string str=&quot;Hallo&quot;;
        throw(str.c_str())
    }
    catch(const char* str)
    {
        cout&lt;&lt;str&lt;&lt;endl; //Warum wird hier noch immer was angezeigt,
                         //obwohl der string seinen Sichtbarkeitsbereich
                         //verlassen hat?
    }
}
</code></pre>
<p>Ich habe das Gleiche mit einem von mir new angelegten Speicherbereich gemacht, doch bei mir wurde nichts angezeigt.<br />
Ich hab das Objekt statisch gemacht und es wurde angezeigt.</p>
<p>Warum geht es aber bei string, das Objekt ist nicht statisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715613</guid><dc:creator><![CDATA[GuardianOfLife]]></dc:creator><pubDate>Mon, 25 May 2009 17:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 17:54:10 GMT]]></title><description><![CDATA[<p>Weil es eben nicht definiert ist, was passiert</p>
<p>Und hier ist es eben so, dass du nen Zeiger auf nen Speicherbereich hast, der noch nicht anderweitig genutzt wird und deshalb steht eben noch das drin, was du reingeschrieben hast...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715614</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 25 May 2009 17:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 19:41:55 GMT]]></title><description><![CDATA[<p>Benutze für Exceptions besser die Standard-Exception-Klassen, da kannst du ebenso eine Nachricht als String mitschicken. Hier mal ein Beispiel, vielleicht besser spezifischere Exceptionklasse benutzen. Es gibt viele abgeleitete Klassen, du kannst auch selber welche schreiben...</p>
<pre><code class="language-cpp">throw std::runtime_error(&quot;Ein Fehler!&quot;);
</code></pre>
<p>Und zum Fangen empfiehlt sich eine Referenz:</p>
<pre><code class="language-cpp">catch (std::runtime_error&amp; e)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1715671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715671</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 May 2009 19:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 19:42:31 GMT]]></title><description><![CDATA[<p>Hat string keinen Destruktor in dem er den angelegten Speicherbereich löscht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715674</guid><dc:creator><![CDATA[GuardianOfLife]]></dc:creator><pubDate>Mon, 25 May 2009 19:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 19:45:40 GMT]]></title><description><![CDATA[<p>GuardianOfLife schrieb:</p>
<blockquote>
<p>Hat string keinen Destruktor in dem er den angelegten Speicherbereich löscht?</p>
</blockquote>
<p>Er <em>gibt</em> den Speicherbereich <em>frei</em>, das heisst, dieser steht wieder anderweitig zur Verfügung. Der verbleibende Speicherinhalt muss sich deswegen nicht gleich ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715676</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 May 2009 19:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 20:09:05 GMT]]></title><description><![CDATA[<p>Das heißt er gibt ihn frei, aber löscht ihn nicht?<br />
Btw warum soll ich Standard Exception Klassen benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715691</guid><dc:creator><![CDATA[GuardianOfLife]]></dc:creator><pubDate>Mon, 25 May 2009 20:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 20:15:18 GMT]]></title><description><![CDATA[<p>GuardianOfLife schrieb:</p>
<blockquote>
<p>Btw warum soll ich Standard Exception Klassen benutzen?</p>
</blockquote>
<p>warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715697</guid><dc:creator><![CDATA[weinodd]]></dc:creator><pubDate>Mon, 25 May 2009 20:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 20:20:47 GMT]]></title><description><![CDATA[<p>GuardianOfLife schrieb:</p>
<blockquote>
<p>Das heißt er gibt ihn frei, aber löscht ihn nicht?</p>
</blockquote>
<p>Den Vorgang &quot;Löschen&quot; gibt es an sich nicht. Man löscht Daten eigentlich erst, indem man sie überschreibt. Der String gibt seinen Speicher frei und erlaubt es anderen Funktionen, diesen wieder zu benutzen und zu überschreiben. Ein wirkliches &quot;Löschen&quot;, also beispielsweise Null-Setzen aller Bytes, würde nicht viel Sinn machen.</p>
<p>GuardianOfLife schrieb:</p>
<blockquote>
<p>Btw warum soll ich Standard Exception Klassen benutzen?</p>
</blockquote>
<p>Zum Beispiel, um die Exception-Hierarchie auszunutzen. Du kannst dir auch eigene Exceptionklassen schreiben, aber grundsätzlich hast du mit der Standard-Hierarchie die Möglichkeit, Exceptions gezielt zu fangen. Viele andere Bibliotheken (darunter Boost) erben ebenfalls von Standard-Exceptions, was dir erlaubt, sowohl sehr spezifisch einzelne Exceptions zu fangen als auch auf hoher Abstraktionsebene festzustellen, dass in deinem Programm ein Fehler aufgetreten ist.</p>
<p>Zumindest solltest du keine Zeiger werfen, deren Gültigkeit bis zum Fangen nicht garantiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715704</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 May 2009 20:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 20:33:39 GMT]]></title><description><![CDATA[<p>Ja das mit dem Zeiger klingt logisch. Kannst du mir noch erklären wie ich einen Text aus zwei Teilen werfen, aufnehmen und ausgeben kann?<br />
Ich hatte das so vor:</p>
<pre><code class="language-cpp">try
{
    string str=&quot;Fehler in Datei: &quot;; //Mit string gehts aber ich will eine eigene
    str+=lpfilename;                //Klasse benutzen
    throw(str) //keine Zeiger also werfe ich das Objekt
}
catch(const string&amp; str)
{
    MessageBox(hwnd,str.c_str(),&quot;Error&quot;,MB_OK|MB_ICONERROR);
}
</code></pre>
<p>Außerdem wollt ich einen char* benutze weil ich in mehreren Abschnitten strings werfe und ich wollt alles verallgemeinern damit ich nicht einen Catchblock für char* und string brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715709</guid><dc:creator><![CDATA[GuardianOfLife]]></dc:creator><pubDate>Mon, 25 May 2009 20:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 20:49:05 GMT]]></title><description><![CDATA[<p>GuardianOfLife schrieb:</p>
<blockquote>
<p>Außerdem wollt ich einen char* benutze weil ich in mehreren Abschnitten strings werfe und ich wollt alles verallgemeinern damit ich nicht einen Catchblock für char* und string brauche.</p>
</blockquote>
<p>Verallgemeinerung ist das Stichwort. Würdest du Exceptionklassen benutzen, hättest du dieses Problem zum Beispiel nicht. Denn du kannst auch <code>char*</code> an Funktionen übergeben, die einen <code>std::string</code> erwarten. Zu diesen Funktionen gehören die Konstruktoren gewisser Standard-Exceptionklassen.</p>
<p>Rohe Zeiger durch die Gegend zu werfen kann gefährlich sein, und es besteht normalerweise kein Grund, nicht auf Exceptionklassen zurückzugreifen. Oder siehst du das anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715719</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 25 May 2009 20:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Zeiger auf ein Speicherbereich zeigen on Mon, 25 May 2009 20:51:36 GMT]]></title><description><![CDATA[<p>Nein und das mit den Zeigern klingt logisch, doch ich sah bis jetzt keinen Grund Exception-Klassen zu benutzen.Wenn ich aber damit char* und Objekte im selben Catchblock fangen kann, erkenne ich schon den nutzen darin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1715723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1715723</guid><dc:creator><![CDATA[GuardianOfLife]]></dc:creator><pubDate>Mon, 25 May 2009 20:51:36 GMT</pubDate></item></channel></rss>