<?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[[teilweise gelöst] Auffangen von Ausnahmen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>jetzt wende ich mich wieder mit einem kleinen Problem an Euch. Beim Ablauf meines Testprogramms wird eine erzwungene Ausnahme nicht aufgefangen.</p>
<pre><code class="language-cpp">int main(int argc, char** args)
    {
        console::Surface screen(make_pair(79, 20));
        screen.fill('o');
        display(screen);

        try {
            screen.put(make_pair(1000, 1000), 'E');

        } catch(console::OutOfBounds&amp; e) {
            cerr &lt;&lt; e.getMessage() &lt;&lt; endl;

        } catch(...) {
            cerr &lt;&lt; &quot;Unkown error! Blame the programmer!&quot; &lt;&lt; endl;

        }

        return 0;
    }
</code></pre>
<p>In Zeile 8 wird die Ausnahme 'console::OutOfBounds' durch die Übergabe eines &quot;zu großen&quot; Parameterpaares erzwungen. Keine der beiden catch-Blöcke wird aufgerufen. Das Ende des Programms wird nicht erreicht (getestet via Einfügen einer Ausgabe).</p>
<p>Nachfolgend der Ausschnitt aus dem Quelltext, welcher die Ausnahme werfen sollte:</p>
<pre><code class="language-cpp">void put(Coord_t coord, char c) throw(OutOfBounds);
        // puts a character at the given location.
</code></pre>
<pre><code class="language-cpp">void Surface::put(Coord_t coord, char c) throw(OutOfBounds)
    {
        // Check boundaries, throw exception if out of bounds
        if(coord.first &gt;= size.first || coord.second &gt;= size.second) {
            throw(OutOfBounds(&quot;put:Coordinate out of bounds!&quot;));
        }

        // Put new char to the requested location
        surface_data[coord.second * size.first + coord.first] = c;
    }
</code></pre>
<p>Die Bedingungen der if-Anweisung sind erfüllt (getestet via Einfügen einer Ausgabe).</p>
<p>Meine Frage an Euch: Wieso greift keiner der beiden catch-Blöcke auf die erzwungene Ausnahme?</p>
<p>Falls von Bedeutung: Entwicklungsumgebung ist DevCpp (4.9.9.2) unter WindowsXP Prof.</p>
<p>Grüße aus dem S(ch)auerland...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193986/teilweise-gelöst-auffangen-von-ausnahmen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 07:28:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193986.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Oct 2007 14:14:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 15:42:48 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>jetzt wende ich mich wieder mit einem kleinen Problem an Euch. Beim Ablauf meines Testprogramms wird eine erzwungene Ausnahme nicht aufgefangen.</p>
<pre><code class="language-cpp">int main(int argc, char** args)
    {
        console::Surface screen(make_pair(79, 20));
        screen.fill('o');
        display(screen);

        try {
            screen.put(make_pair(1000, 1000), 'E');

        } catch(console::OutOfBounds&amp; e) {
            cerr &lt;&lt; e.getMessage() &lt;&lt; endl;

        } catch(...) {
            cerr &lt;&lt; &quot;Unkown error! Blame the programmer!&quot; &lt;&lt; endl;

        }

        return 0;
    }
</code></pre>
<p>In Zeile 8 wird die Ausnahme 'console::OutOfBounds' durch die Übergabe eines &quot;zu großen&quot; Parameterpaares erzwungen. Keine der beiden catch-Blöcke wird aufgerufen. Das Ende des Programms wird nicht erreicht (getestet via Einfügen einer Ausgabe).</p>
<p>Nachfolgend der Ausschnitt aus dem Quelltext, welcher die Ausnahme werfen sollte:</p>
<pre><code class="language-cpp">void put(Coord_t coord, char c) throw(OutOfBounds);
        // puts a character at the given location.
</code></pre>
<pre><code class="language-cpp">void Surface::put(Coord_t coord, char c) throw(OutOfBounds)
    {
        // Check boundaries, throw exception if out of bounds
        if(coord.first &gt;= size.first || coord.second &gt;= size.second) {
            throw(OutOfBounds(&quot;put:Coordinate out of bounds!&quot;));
        }

        // Put new char to the requested location
        surface_data[coord.second * size.first + coord.first] = c;
    }
</code></pre>
<p>Die Bedingungen der if-Anweisung sind erfüllt (getestet via Einfügen einer Ausgabe).</p>
<p>Meine Frage an Euch: Wieso greift keiner der beiden catch-Blöcke auf die erzwungene Ausnahme?</p>
<p>Falls von Bedeutung: Entwicklungsumgebung ist DevCpp (4.9.9.2) unter WindowsXP Prof.</p>
<p>Grüße aus dem S(ch)auerland...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376610</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 02 Oct 2007 15:42:48 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 14:17:39 GMT]]></title><description><![CDATA[<p>Was macht denn das Programm stattdessen, wenn es die Exception nicht auffängt?</p>
<p>(und hast du mal im Debugger verfolgt, was eigenstlich passiert?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376616</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 14:25:48 GMT]]></title><description><![CDATA[<p>1. Sind Exceptions in den Compile-Options aktiviert? Manche ältere Compiler haben die ausgeschaltet.<br />
2. throw(bla) in Zeile 5 des letzten Codebsp. Ehm, geht das überhaupt mit den zwei Klammern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376628</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 14:33:30 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>2. throw(bla) in Zeile 5 des letzten Codebsp. Ehm, geht das überhaupt mit den zwei Klammern?</p>
</blockquote>
<p>Wieso sollte es nicht gehen - sind doch auch zwei geöffnete Klammern (eine für den Ctor-Aufruf, die zweite schließt den kompletten throw-Ausdruck ein).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376640</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 14:48:13 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Was macht denn das Programm stattdessen, wenn es die Exception nicht auffängt?</p>
<p>(und hast du mal im Debugger verfolgt, was eigenstlich passiert?)</p>
</blockquote>
<p>Faktisch &quot;tut sich nichts&quot;. Das Programm bricht ohne Meldung ab.</p>
<p>EDIT: <em>Die display-Funktion verrichtet noch wie erwartet ihren Dienst.</em></p>
<p>Durch den Debugger hab ich das Programm noch nicht jagen können. Das Teil scheint hier etwas rumzuzicken. Ich werde das ganze aber nachher noch einmal auf einem Linux-System (mit halbwegs aktuellen Paketen) probieren.</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>1. Sind Exceptions in den Compile-Options aktiviert? Manche ältere Compiler haben die ausgeschaltet.<br />
2. throw(bla) in Zeile 5 des letzten Codebsp. Ehm, geht das überhaupt mit den zwei Klammern?</p>
</blockquote>
<p>1. Zumindest kann ich gerade nichts finden, was dieses explizit abschaltet und da</p>
<p>2. sich der Compiler sich bei meinem Programm nicht beschwert hatte, gehe ich mal schwer davon aus, dass sowohl 1 und 2 nicht das Thema sind. Des weiteren schreibt mein Buch (und so ziemlich alles andere auch), dass Exceptions ganz normale Klassen sind, warum sollte das also mit &quot;zwei Klammern&quot; nicht funktionieren. Ich rufe lediglich einen anderen als den Default-Konstruktor auf.</p>
<p>--</p>
<p>Schade, ich dachte, ich hätte lediglich was ganz triviales übersehen. Bisher traf ich noch nicht auf Probleme, welche sich nicht mit einem gewaltigen Schlag vor den Kopf hätten erklären lassen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376646</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 14:57:53 GMT]]></title><description><![CDATA[<p>bwbg schrieb:</p>
<blockquote>
<p>EDIT: <em>Die display-Funktion verrichtet noch wie erwartet ihren Dienst.</em></p>
</blockquote>
<p>Das heißt, sie schreibt das E irgendwo außerhalb des verfügbaren Fensters in den Speicher? Das deutet doch sehr darauf hin, daß die Exception ignoriert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376669</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Oct 2007 14:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 15:08:08 GMT]]></title><description><![CDATA[<p>Mit diesem EDIT wollte ich nur verdeutlichen, dass bis zum try-catch-Block alles nach Plan verläuft und lediglich die Angelegenheit mit den Ausnahmen (welche ich durch das Schreiben &quot;außerhalb des Verfügbaren Fensters&quot; testen wollte) nicht so funktioniert, wie ich das erwarte.</p>
<p>void console::Surface::put wirft die Ausnahme (bzw. sollte das tun), die Bedingung für die Ausnahme ist in dem Falle auch erfüllt. Ab dem throw (Zeile 5 im 3. Code-Abschnitt) verlässt mich mein Latein (und mein Programm .. wahrscheinlich).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376678</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 02 Oct 2007 15:08:08 GMT</pubDate></item><item><title><![CDATA[Reply to [teilweise gelöst] Auffangen von Ausnahmen on Tue, 02 Oct 2007 15:41:45 GMT]]></title><description><![CDATA[<p>Ich habe das Programm jetzt hier auf meiner Linux-Dose übersetzt und beim Ausführen verhält es sich so, wie ich es erwartet habe:</p>
<p>Die Ausnahme wird geworfen, und der entsprechende Hinweistext wird ausgegeben.</p>
<p>Somit handelt es sich um ein &quot;lokales&quot; Problem.</p>
<p>Danke für die Mühe...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1376704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1376704</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 02 Oct 2007 15:41:45 GMT</pubDate></item></channel></rss>