<?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[Fehler bei new abfangen, freien Speicher ermitteln]]></title><description><![CDATA[<p>Ich habe sehr große Arrays die nicht unbedingt in den freien Speicher passen. Das möchte ich aber vor dem Ausführen von new wissen, damit nicht die auslagerungsdatei bemüht wird.</p>
<p>Zudem möchte ich abfangen können falls new komplett fehl schlägt. Habe schon erlebt das mein Programm bei new abgestürzt ist als ich versehentlich mehrere Gigabyte addressieren wollte. Wie fange ich das zur Laufzeit ab?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208030/fehler-bei-new-abfangen-freien-speicher-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 11:42:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208030.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Mar 2008 22:24:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Thu, 13 Mar 2008 22:24:24 GMT]]></title><description><![CDATA[<p>Ich habe sehr große Arrays die nicht unbedingt in den freien Speicher passen. Das möchte ich aber vor dem Ausführen von new wissen, damit nicht die auslagerungsdatei bemüht wird.</p>
<p>Zudem möchte ich abfangen können falls new komplett fehl schlägt. Habe schon erlebt das mein Programm bei new abgestürzt ist als ich versehentlich mehrere Gigabyte addressieren wollte. Wie fange ich das zur Laufzeit ab?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474000</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Thu, 13 Mar 2008 22:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Thu, 13 Mar 2008 22:27:04 GMT]]></title><description><![CDATA[<p>new gibt 0 zurück, wenn es fehlschlägt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474002</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 13 Mar 2008 22:27:04 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Thu, 13 Mar 2008 22:28:58 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a>: nö.<br />
wenn <code>new</code> fehlschlägt, kannst du mit <code>catch</code>  <code>bad_alloc</code> fangen.<br />
oder du verwendest das nothrow- <code>new</code> , welches dir 0 im fall einer fehlgeschlagenen allokation zurückgibt.</p>
<p>allerdings rate ich dir, dein speicherdesign zu überdenken. musst du wirklich so viel platz auf einmal reservieren? (das im vorhinein abzufragen geht mit standardmitteln nicht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474005</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 13 Mar 2008 22:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Thu, 13 Mar 2008 22:31:45 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a>: nö.<br />
wenn <code>new</code> fehlschlägt, kannst du mit <code>catch</code>  <code>bad_alloc</code> fangen.<br />
oder du verwendest das nothrow- <code>new</code> , welches dir 0 im fall einer fehlgeschlagenen allokation zurückgibt.</p>
<p>allerdings rate ich dir, dein speicherdesign zu überdenken. musst du wirklich so viel platz auf einmal reservieren? (das im vorhinein abzufragen geht mit standardmitteln nicht)</p>
</blockquote>
<p>Sorry, habe gedacht, dass ich das mal wo gelesen habe.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Habe jetzt aber mal probiert den Speicher so zu füllen, um es zu überprüfen, aber es ist gar nicht so einfach. <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/1474006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474006</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 13 Mar 2008 22:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Thu, 13 Mar 2008 22:36:42 GMT]]></title><description><![CDATA[<p>vielleicht solltest du in dem fall lieber im internet nach infos suchen und es nicht selbst ausprobieren <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>
<p>nothrow-new funktioniert übrigens so:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
T* foo ()
{
   return new (nothrow) T;
}
</code></pre>
<p>/edit: <code>&lt;new&gt;</code> inkludieren dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474009</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 13 Mar 2008 22:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Thu, 13 Mar 2008 22:40:20 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>vielleicht solltest du in dem fall lieber im internet nach infos suchen und es nicht selbst ausprobieren <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="😃"
    /><br />
[/cpp]</p>
</blockquote>
<p>Naja.. Ich wollte es zuerst einfach mit einem sehr grossen Array versuchen, aber das geht ja nicht mal. <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="😃"
    /><br />
Ne einfache Schleife tuts ja dann hald auch. Räum ich hald nachher nicht mehr.. <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/1474013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474013</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 13 Mar 2008 22:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Fri, 14 Mar 2008 06:35:07 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>new gibt 0 zurück, wenn es fehlschlägt.</p>
</blockquote>
<p>Eine Ergänzung:<br />
Da es noch immer Leute gibt die noch immer mit nicht Standardkonformen Compilern arbeiten (Scheinbar ist z.B. VC++6 ja doch noch verbreitet, zumindestens in realen Projekten), möchte ich das nicht ganz ausschließen.</p>
<p>Laut C++98 Standard wirft new eine Exception, und nach Standard sind auch Exceptions aktiv. In sofern haben die Vorposter vollkommen recht.</p>
<p>In einer Prä-Standard Umgebung oder falls man Exceptions deaktiviert, wird die Rückgabe von 0 durchaus eine alternative Möglichkeit sein. Bei manchen der alten Compiler gibt es aber eine Möglichkeit auf das Standardkonforme Verhalten zu wechseln (ich glaube bei VC++6 z.b. durch ein include &lt;new&gt;).</p>
<p>Bedingt dadurch das noch etliche Tutorials und Bücher am Standard vorbei geschrieben sind (oder schlicht und ergreifend keine Aktualisierung erfahren haben) kann es sein das man aber das alte Verhalten irgendwo gelesen hat. Dies gilt aber eigentlich seit 10 Jahren nicht mehr.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474055</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 14 Mar 2008 06:35:07 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Fri, 14 Mar 2008 10:30:51 GMT]]></title><description><![CDATA[<p>@OT: Ich nehme mal sehr stark an, dass du std::vector&lt;&gt; benutzt an Stelle von normalen Arrays, schließlich bist du so schlau und weißt, dass vector&lt;&gt; dir tausendfach mehr Arbeit und Sorgen abnimmt, als dir der gerade bei großen Datenmengen geradezu minimale Mehraufwand dir je bereiten wird. Wenn du jetzt zu so großen Datenmengen kommst, dass du Angst haben musst, dass sie nicht mehr am Stück in den Speicher passen, dann könntest du beispielsweise auf deque&lt;&gt; umsteigen. Die speichert nämlich nicht alles an einem Stück wie Arrays und vector&lt;&gt;, sondern teilt das Array in mundgerechte Happen, zugegebenermaßen mit etwas mehr Overhead, aber immernoch in durchaus akzeptablem Rahmen.<br />
Gegen das Schreiben der Auslagerungsdatei kannst du meines Wissens nicht viel machen mit Standard C++. Wäre auch blöd, stell dir vor du hast irgendein riesenprogramm laufen das fast den gesamten Speicher frisst und hast dann dein selbstgeschriebenes Programm das sich durch mangelnden freien Speicher einschüchtern lässt und Angst vorm Auslagern hat - das Programm würde sehr schnell aufhören zu arbeiten, denn ohne Speicher gehts halt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474176</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 14 Mar 2008 10:30:51 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Fri, 14 Mar 2008 10:41:12 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...deque&lt;&gt; ...zugegebenermaßen mit etwas mehr Overhead, aber immernoch in durchaus akzeptablem Rahmen....</p>
</blockquote>
<p>.. und bestimmt nicht mit mehr Overhead als eine selbstgestrickte Lösung (die kann ja auch nicht zaubern).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474183</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 14 Mar 2008 10:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Fri, 14 Mar 2008 12:51:40 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a><br />
Danke für die Ergänzung. Ich weiss wirklich nicht mehr, wie ich drauf gekommen bin. Habe irgendwie einfach gedacht, dass es logisch wäre. Jedoch &quot;weiss&quot; ich, wie ich nachher gemerkt habe EIGENTLICH, dass ein exception geworfen wird, war mir einfach, wo ich das geschrieben habe nicht mehr präsent.</p>
<p>Aber kann es sein, dass es gar nicht so schnell geworfen wird?<br />
Ich habe mal eine endlosschleife laufen lassen, bad_alloc wird gefangen. Jedoch hat sich mein Speicher gemütlich gefüllt, ohne dass bad_alloc geworfen wurde. Sprich: &quot;Wann wird bad_alloc effektiv geworfen&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474264</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 Mar 2008 12:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei new abfangen, freien Speicher ermitteln on Fri, 14 Mar 2008 13:04:49 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Sprich: &quot;Wann wird bad_alloc effektiv geworfen&quot;?</p>
</blockquote>
<p>Das wird wohl von der Implementierung des Allokator abhängen. Wenn die Systemfunktionen malloc etc verwendet weden, werden es wohl die Speicherverwaltungsstrategien des OS entscheiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1474276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1474276</guid><dc:creator><![CDATA[witte_]]></dc:creator><pubDate>Fri, 14 Mar 2008 13:04:49 GMT</pubDate></item></channel></rss>