<?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[Errorcodes]]></title><description><![CDATA[<p>Hallo!</p>
<p>Eine kurze Frage und zwar wie kann man ein Programm nach auftreten eines Fehlers beenden und dazu einen Errorcodes ausgeben unter C++?</p>
<p>Unter C hab ich das immer mittels exit(irgendeincode)gemacht! Gibt es eine andere Möglichkeit unter C++?<br />
Und wie sieht das mit der Speicherverwaltung aus ich muss doch vorher den Destruktor aufrufen da ja exit() abrupt das Progamm schließt!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239653/errorcodes</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 10:03:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239653.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Apr 2009 10:44:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 10:44:40 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Eine kurze Frage und zwar wie kann man ein Programm nach auftreten eines Fehlers beenden und dazu einen Errorcodes ausgeben unter C++?</p>
<p>Unter C hab ich das immer mittels exit(irgendeincode)gemacht! Gibt es eine andere Möglichkeit unter C++?<br />
Und wie sieht das mit der Speicherverwaltung aus ich muss doch vorher den Destruktor aufrufen da ja exit() abrupt das Progamm schließt!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701418</guid><dc:creator><![CDATA[_coder]]></dc:creator><pubDate>Sun, 26 Apr 2009 10:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 10:54:52 GMT]]></title><description><![CDATA[<p>Mit dem return Wert aus main().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701424</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 26 Apr 2009 10:54:52 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 10:58:15 GMT]]></title><description><![CDATA[<p>Ok, dass ist natürlich auch eine Möglichkeit!<br />
Gibts keine andere?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701426</guid><dc:creator><![CDATA[_coder]]></dc:creator><pubDate>Sun, 26 Apr 2009 10:58:15 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 10:59:48 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Mit dem return Wert aus main().</p>
</blockquote>
<p>Diese Moeglichkeit gibt es auch unter C - und ist eigentlich die Std.-Methode, da main auch nur eine Funktion ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701428</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 10:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 11:03:14 GMT]]></title><description><![CDATA[<p>exit(..) sollte auch gehen.</p>
<p>Destruktoren musst Du nur in wirklich ganz seltenen Fällen aufrufen (für den Otto Normalverbraucher: nie).<br />
Ich denke Du meinst delete / delete[]. Die musst Du selbstverständlich aufrufen falls deine Objekte auf dem Heap mit new / new[] erzeugt wurden. Dürfte aber mit RAII kein Problem sein.</p>
<p>Simon</p>
<p>Edit:<br />
Ist übrigens in C genau das selbe einfach mit free(..).<br />
Natürlich musst Du überhaupt alles Resourcen freigeben (z.B. Handles vom OS).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701430</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 26 Apr 2009 11:03:14 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 11:01:55 GMT]]></title><description><![CDATA[<p>_coder schrieb:</p>
<blockquote>
<p>Und wie sieht das mit der Speicherverwaltung aus ich muss doch vorher den Destruktor aufrufen da ja exit() abrupt das Progamm schließt!</p>
</blockquote>
<p>Das Betriebssystem sollte den Speicher wieder freigeben. Wie schon oben gesagt, der normale Weg ist via Return.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701431</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 11:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 11:20:25 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Das Betriebssystem sollte den Speicher wieder freigeben.</p>
</blockquote>
<p>Darauf sollte man sich nicht verlassen. Was aber auch kein Problem ist, wenn man sein Design mit RAII ein wenig durchdacht hat.</p>
<p>Die Funktion <code>exit()</code> räumt den Stack beim Beenden normal auf - etwa im Gegensatz zu <code>abort()</code> . Wenn man sich in der <code>main()</code> -Funktion befindet, kann man gerade so gut <code>return</code> schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701439</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 26 Apr 2009 11:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 11:56:20 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Das Betriebssystem sollte den Speicher wieder freigeben.</p>
</blockquote>
<p>Darauf sollte man sich nicht verlassen. Was aber auch kein Problem ist, wenn man sein Design mit RAII ein wenig durchdacht hat.</p>
<p>Die Funktion <code>exit()</code> räumt den Stack beim Beenden normal auf - etwa im Gegensatz zu <code>abort()</code> . Wenn man sich in der <code>main()</code> -Funktion befindet, kann man gerade so gut <code>return</code> schreiben.</p>
</blockquote>
<p>abort () hat dabei noch eine andere Funktion, dass es einen Stacktrace erzeugt (z.B. als Core-File), den man fuer Debugzwecke benutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701465</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 11:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 12:09:10 GMT]]></title><description><![CDATA[<p>return aus der main() ist schon ganz gut.</p>
<p>aber wie kriegt man auf einer unterunterfunktion es hin, die main() was returnen zu lassen? mit exceptions!</p>
<pre><code class="language-cpp">void bar(){
   //char* c=new char[3000000000];//main returnt 1
   throw FalschesPasswortException();//main returnt 3
   //throw SocketException();//main returnt 2
}

void foo(){
   bar();
}

int main(){
   try{
     foo();
     return 0;
   }
   catch(FalschesPasswortException &amp;e){
      cout&lt;&lt;&quot;Fataler Fehler: &quot;&lt;&lt;&quot;Falsches Passwort&quot;&lt;&lt;'\n';
      return 3;
   }
   catch(std::exception&amp; e){
      cout&lt;&lt;&quot;Fataler Fehler: &quot;&lt;&lt;e.why()&lt;&lt;'\n';
      return 1;
   }
   catch(...){
      cout&lt;&lt;&quot;Fataler Fehler: &quot;&lt;&lt;&quot;unbekannter Fehler&quot;&lt;&lt;'\n';
      return 2;
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1701470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701470</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Apr 2009 12:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 17:25:31 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>abort () hat dabei noch eine andere Funktion, dass es einen Stacktrace erzeugt (z.B. als Core-File), den man fuer Debugzwecke benutzen kann.</p>
</blockquote>
<p>Danke, das war mir nicht bekannt. Aber in fertigen Programmen sollte <code>abort()</code> eigentlich nicht vorkommen. Meistens schafft man es auch irgendwie einzurichten, dass man kein <code>exit()</code> benötigt...</p>
<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">e.why()
</code></pre>
</blockquote>
<p>Eine philosophische Memberfunktion ist immer nützlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701606</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 26 Apr 2009 17:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 18:34:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Die Funktion <code>exit()</code> räumt den Stack beim Beenden normal auf - etwa im Gegensatz zu <code>abort()</code> .</p>
</blockquote>
<p>stimmt doch gar nicht!</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
using namespace std;

int main()
{
	ofstream out(&quot;test.txt&quot;);
	out&lt;&lt;&quot;hallo\n&quot;;
	exit(0);
}
</code></pre>
<p>mit exit ist danach dei datei leer. mit return klappts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701643</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Apr 2009 18:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 18:49:40 GMT]]></title><description><![CDATA[<p>Ergänzung:</p>
<p>Standard C++ 98<br />
3.6.1 Main function<br />
Abschnitt 4</p>
<blockquote>
<p>Calling the function<br />
<code>void exit(int);</code><br />
declared in <code>&lt;cstdlib&gt;</code> (18.3) terminates the program without leaving the current block and hence without destroying any objects with automatic storage duration (12.4). If exit is called to end a program during the destruction of an object with static storage duration, the program has undefined behavior.</p>
</blockquote>
<p>Standard C++ 98<br />
3.6.3 Termination<br />
Abschnitt 4</p>
<blockquote>
<p>Calling the function<br />
<code>void abort();</code><br />
declared in <code>&lt;cstdlib&gt;</code> terminates the program without executing destructors for objects of automatic or static storage duration and without calling the functions passed to <code>atexit()</code> .</p>
</blockquote>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701650</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 26 Apr 2009 18:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 19:14:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>hartmut1164 schrieb:</p>
<blockquote>
<p>abort () hat dabei noch eine andere Funktion, dass es einen Stacktrace erzeugt (z.B. als Core-File), den man fuer Debugzwecke benutzen kann.</p>
</blockquote>
<p>Danke, das war mir nicht bekannt. Aber in fertigen Programmen sollte <code>abort()</code> eigentlich nicht vorkommen.</p>
</blockquote>
<p>Ueberhaupt nicht - denke nur an die Verwendung von std::bad_alloc:</p>
<pre><code class="language-cpp">int *aGanzGross = NULL;
try
{
   aGanzGross= new int [1000000];
}
catch (bad_alloc&amp;)
{
   cerr &lt;&lt; &quot;Autsch&quot; &lt;&lt; endl;
   abort ();
}
</code></pre>
<p>Das hat die gleiche Funktion wie in C:</p>
<pre><code class="language-cpp">int   *aGanzGross;

aGanzGross = calloc (1000000, sizeof (int));
if (aGanzGross == NULL)
{
    fprintf (stderr, &quot;Autsch!\n&quot;);
    abort ();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1701664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701664</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 19:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 19:20:28 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Ueberhaupt nicht - denke nur an die Verwendung von std::bad_alloc:</p>
</blockquote>
<p>nein, so läßt du die dateien offen, du schließt die datenbanken nicht und machst mit abort einfach alles falsch.<br />
wirf doch einfach hoch bis zu main und geh dort mit return raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701667</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Apr 2009 19:20:28 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 19:30:01 GMT]]></title><description><![CDATA[<p>Es wäre sogar erlaubt, die Exception ganz durchwerfen zu lassen, also sie nicht mal in der <code>main</code> zu fangen. Wäre immer noch besser als <code>abort</code> aufzurufen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701668</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 26 Apr 2009 19:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 19:53:05 GMT]]></title><description><![CDATA[<p>Hmm. Da habe ich wohl den Satz auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> falsch interpretiert:</p>
<p>exit schrieb:</p>
<blockquote>
<p>Terminates the process normally, performing the regular cleanup for terminating processes.</p>
</blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Es wäre sogar erlaubt, die Exception ganz durchwerfen zu lassen, also sie nicht mal in der <code>main</code> zu fangen. Wäre immer noch besser als <code>abort</code> aufzurufen.</p>
</blockquote>
<p>Führt das nicht zu Programmabstürzen? Soweit ich mich erinnern kann, haben ungefangene Exceptions in Release-Versionen immer zu Fehlermeldungen wie &quot;Programm.exe funktioniert nicht mehr&quot; geführt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701677</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 26 Apr 2009 19:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:00:24 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Ueberhaupt nicht - denke nur an die Verwendung von std::bad_alloc:</p>
</blockquote>
<p>nein, so läßt du die dateien offen, du schließt die datenbanken nicht und machst mit abort einfach alles falsch.<br />
wirf doch einfach hoch bis zu main und geh dort mit return raus.</p>
</blockquote>
<p>Mmmhh ... Jein. abort () ist soetwas wie das Zeichen fuer es &quot;ging richtig und ganz boese schief&quot;. Wenn bei den heutigen Systemen kein Heap zu allocieren ist, dann lief etwas sehr uebel und es ist IMHO dann besser, die Sache so brutal als moeglich abzuwuergen. Eine Datenbank sollte mit einem toten Client zurechtkommen, und auch ein noch offener File ist fuer ein Betriebssystem heute kein wirkliches Problem mehr sein - schliesslich entspricht abort () etwa dem Verhalten von SIGKILL und damit muss das Betriebssystem/Datenbanken etc. auch umgehen koennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701681</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 19:59:44 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Wenn bei den heutigen Systemen kein Heap zu allocieren ist, dann lief etwas sehr uebel</p>
</blockquote>
<p>Wieso? <code>std::bad_alloc</code> wird zum Beispiel auch geworfen, wenn kein genügend grosser Speicherbereich an einem Stück gefunden werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701683</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 26 Apr 2009 19:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:00:57 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Mmmhh ... Jein. abort () ist soetwas wie das Zeichen fuer es ging richtig schief. Wenn bei den heutigen Systemen kein Heap zu allocieren ist, dann lief etwas sehr uebel und es ist IMHO dann besser, die Sache so brutal als moeglich abzuwuergen. Eine Datenbank sollte mit einem toten Client zurechtkommen, und auch ein noch offener File ist fuer ein Betriebssystem heute kein wirkliches Problem mehr sein - schliesslich entspricht abort () etwa dem Verhalten von SIGKILL und damit muss das Betriebssystem/Datenbanken etc. auch umgehen koennen.</p>
</blockquote>
<p>Die Exception <code>bad_alloc</code> durchwerfen lassen, so hast du einen brutalen Absturz, aber das Programm räumt alles auf. <code>abort</code> und <code>exit</code> haben in C++ eher nichts zu suchen.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Führt das nicht zu Programmabstürzen? Soweit ich mich erinnern kann, haben ungefangene Exceptions in Release-Versionen immer zu Fehlermeldungen wie &quot;Programm.exe funktioniert nicht mehr&quot; geführt...</p>
</blockquote>
<p>Das wäre in dem Fall auch gewollt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701684</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:01:26 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Hmm. Da habe ich wohl den Satz auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> falsch interpretiert:</p>
<p>exit schrieb:</p>
<blockquote>
<p>Terminates the process normally, performing the regular cleanup for terminating processes.</p>
</blockquote>
</blockquote>
<p>jo. das ist wohl der text für exit, wenn man nur c benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701685</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:02:21 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Wenn bei den heutigen Systemen kein Heap zu allocieren ist, dann lief etwas sehr uebel</p>
</blockquote>
<p>Wieso? <code>std::bad_alloc</code> wird zum Beispiel auch geworfen, wenn kein genügend grosser Speicherbereich an einem Stück gefunden werden kann.</p>
</blockquote>
<p>Und das heisst, dass das Programm (oder sonst etwas) sehr schlimmes ablaeuft. Das letzte Mal, dass ich einen fragmentieren Heap sah war auf Win3.11 (muss baer sagen, dass ich seit WIN NT4 vor keiner Win-Kiste mehr sass).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701686</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:06:42 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Mmmhh ... Jein. abort () ist soetwas wie das Zeichen fuer es ging richtig schief. Wenn bei den heutigen Systemen kein Heap zu allocieren ist, dann lief etwas sehr uebel und es ist IMHO dann besser, die Sache so brutal als moeglich abzuwuergen. Eine Datenbank sollte mit einem toten Client zurechtkommen, und auch ein noch offener File ist fuer ein Betriebssystem heute kein wirkliches Problem mehr sein - schliesslich entspricht abort () etwa dem Verhalten von SIGKILL und damit muss das Betriebssystem/Datenbanken etc. auch umgehen koennen.</p>
</blockquote>
<p>Die Exception <code>bad_alloc</code> durchwerfen lassen, so hast du einen brutalen Absturz, aber das Programm räumt alles auf. <code>abort</code> und <code>exit</code> haben in C++ eher nichts zu suchen.</p>
</blockquote>
<p>Ich weiss aber nicht wo der Absturz war. Bei abort () habe ich wenigstens einen core-File und kann nachsehen wo es passiert ist. Gerade dieses &quot;Aufraeumen&quot; vernichtet ja diese wichtige Information.</p>
<p>Wie gesagt: abort () sollte reserviert sei fuer schlimme Dinge und nicht fuer &quot;normale&quot; Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701689</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:25:32 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Ich weiss aber nicht wo der Absturz war. Bei abort () habe ich wenigstens einen core-File und kann nachsehen wo es passiert ist. Gerade dieses &quot;Aufraeumen&quot; vernichtet ja diese wichtige Information.</p>
</blockquote>
<pre><code class="language-cpp">int *aGanzGross = NULL;
try
{
   aGanzGross= new int [1000000];
}
catch (bad_alloc&amp;)
{
   cerr &lt;&lt; &quot;Autsch&quot; &lt;&lt; endl;
   // Etwas ins Log speichern.
   // Nun kannst du eine weitere Exception werfen oder...
   throw; // &lt;- Weiterwerfen
}
</code></pre>
<p>Du kannst eine eigene Exception dann weiterwerfen, welche zum Beispiel <code>__LINE__</code> und <code>__FUNCTION__</code> speichert. Du kannst alles mögliche in die Exception packen und irgendwo speichern.<br />
Bei einem Absturz wird ja glaub ich auch ein Minidump erzeugt. Den kann man dann analysieren.</p>
<p>Edit: Ich meinte natürlich <code>__FILE__</code> ... <code>__FUNCTION__</code> ist nicht im Standard, wird zum Teil zwar auch unterstützt <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>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701693</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:25:32 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:11:50 GMT]]></title><description><![CDATA[<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Ich weiss aber nicht wo der Absturz war. Bei abort () habe ich wenigstens einen core-File und kann nachsehen wo es passiert ist. Gerade dieses &quot;Aufraeumen&quot; vernichtet ja diese wichtige Information.</p>
</blockquote>
<p>da mach ich dann</p>
<pre><code class="language-cpp">__asm int 3;
</code></pre>
<p>oder sowas spaßiges. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701694</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Errorcodes on Sun, 26 Apr 2009 20:27:53 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>hartmut1164 schrieb:</p>
<blockquote>
<p>Ich weiss aber nicht wo der Absturz war. Bei abort () habe ich wenigstens einen core-File und kann nachsehen wo es passiert ist. Gerade dieses &quot;Aufraeumen&quot; vernichtet ja diese wichtige Information.</p>
</blockquote>
<p>da mach ich dann</p>
<pre><code class="language-cpp">__asm int 3;
</code></pre>
<p>oder sowas spaßiges. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
</blockquote>
<p>Da kann man viel machen ...</p>
<pre><code class="language-cpp">int ErrorHandler::BrutalAbort_Count_Zero (int   iIn)
{
        if (iIn == 0)
                return iIn;
        else
                return (BrutalAbort_Count_Zero (iIn - 1));
}

int ErrorHandler::BrutalAbort (void)
{
        return ((1 + BrutalAbort_Count_Zero (3)) / (BrutalAbort_Count_Zero (BrutalAbort_Count_Zero (2))));
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Bisher hat noch kein Compiler gemerkt, dass ich hier eine Division durch 0 veranstalte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701699</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 26 Apr 2009 20:27:53 GMT</pubDate></item></channel></rss>