<?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[Programmabsturz bei Speicherreservierung]]></title><description><![CDATA[<p>Hallo ihr C++ Lemminge,</p>
<p>seit ein paar Stunden beschäftigt mich ein Problem und zwar ehrlich gesagt das seltsamste, das ich jemals hatte. Die meiste Zeit, hab ich es versucht, einzugrenzen, allerdings selbst das nur mit mäßigem Erfolg. Ich schreib einfach mal alles, was ich rausgefunden habe:</p>
<p>Alles dreht sich um folgenden extrem simplen Codeschnipsel:</p>
<pre><code class="language-cpp">double *x = new double[500];
</code></pre>
<p>Setze ich diese Zeile an irgendeine Stelle in meinem Code, stürzt das Programm ab und zwar <strong>nicht</strong> in der Zeile, in der der Code steht sondern irgendwann <strong>später</strong>, allerdings immer bei einer weiteren Speicherreservierung.</p>
<p>Die einzige Stelle, an der der Code das Programm nicht zum Absturz bringt, ist <strong>direkt</strong> am Anfang der main(). Gibt es jedoch vor dieser Codezeile schon eine andere Speicherreservierung, stürzt es wieder ab.</p>
<p>Bisher könnte es ja daran liegen, dass der Speicher nicht ausreicht, aber:</p>
<p>ändere ich die Länge des Arrays auf zB. 2000 oder mehr, läuft alles problemlos. 20000: kein Problem, 1000000: kein Problem. Es stürzt nur ab bei Werten von etwa 300 bis 1000 (der exakte Wert hängt davon ab, an welcher Stelle im Programm es steht). Unter 300 ist auch wieder kein Problem.</p>
<p>Ändere ich den Variablennamen: weiterhin Abstürze<br />
Ändere ich den Variablentyp auf int (4 byte): Absturz bei Verdopplung des kritischen Intervalls (also von ~ 600 bis 2000), das gleiche für float (4 byte)</p>
<p>Zusammenfassend:<br />
Reserviere ich mit &quot;new&quot; Speicher im Bereich von ~ 2400 bis 8000 byte, stürzt das Programm zu einem <strong>späteren</strong> Zeitpunkt bei einer anderen Speicherreservierung ab. Weniger Speicher = kein Problem, mehr Speicher = kein Problem.</p>
<p>Kommentiere ich die Stelle, an der es später abstürzt aus, stürzt es bei der nächstmöglichen Speicherreservierung ab. Gibt es keine mehr danach, terminiert das Programm ganz normal.</p>
<p>Jeder, dem ich das Problem bisher geschildert hab, zuckt verständlicherweise nur ahnungslos mit den Schultern. Vielleicht hab ich hier ja mehr Glück <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>Danke für jede Hilfe<br />
Godemit</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275494/programmabsturz-bei-speicherreservierung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 23:24:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275494.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Oct 2010 15:49:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmabsturz bei Speicherreservierung on Fri, 15 Oct 2010 15:49:54 GMT]]></title><description><![CDATA[<p>Hallo ihr C++ Lemminge,</p>
<p>seit ein paar Stunden beschäftigt mich ein Problem und zwar ehrlich gesagt das seltsamste, das ich jemals hatte. Die meiste Zeit, hab ich es versucht, einzugrenzen, allerdings selbst das nur mit mäßigem Erfolg. Ich schreib einfach mal alles, was ich rausgefunden habe:</p>
<p>Alles dreht sich um folgenden extrem simplen Codeschnipsel:</p>
<pre><code class="language-cpp">double *x = new double[500];
</code></pre>
<p>Setze ich diese Zeile an irgendeine Stelle in meinem Code, stürzt das Programm ab und zwar <strong>nicht</strong> in der Zeile, in der der Code steht sondern irgendwann <strong>später</strong>, allerdings immer bei einer weiteren Speicherreservierung.</p>
<p>Die einzige Stelle, an der der Code das Programm nicht zum Absturz bringt, ist <strong>direkt</strong> am Anfang der main(). Gibt es jedoch vor dieser Codezeile schon eine andere Speicherreservierung, stürzt es wieder ab.</p>
<p>Bisher könnte es ja daran liegen, dass der Speicher nicht ausreicht, aber:</p>
<p>ändere ich die Länge des Arrays auf zB. 2000 oder mehr, läuft alles problemlos. 20000: kein Problem, 1000000: kein Problem. Es stürzt nur ab bei Werten von etwa 300 bis 1000 (der exakte Wert hängt davon ab, an welcher Stelle im Programm es steht). Unter 300 ist auch wieder kein Problem.</p>
<p>Ändere ich den Variablennamen: weiterhin Abstürze<br />
Ändere ich den Variablentyp auf int (4 byte): Absturz bei Verdopplung des kritischen Intervalls (also von ~ 600 bis 2000), das gleiche für float (4 byte)</p>
<p>Zusammenfassend:<br />
Reserviere ich mit &quot;new&quot; Speicher im Bereich von ~ 2400 bis 8000 byte, stürzt das Programm zu einem <strong>späteren</strong> Zeitpunkt bei einer anderen Speicherreservierung ab. Weniger Speicher = kein Problem, mehr Speicher = kein Problem.</p>
<p>Kommentiere ich die Stelle, an der es später abstürzt aus, stürzt es bei der nächstmöglichen Speicherreservierung ab. Gibt es keine mehr danach, terminiert das Programm ganz normal.</p>
<p>Jeder, dem ich das Problem bisher geschildert hab, zuckt verständlicherweise nur ahnungslos mit den Schultern. Vielleicht hab ich hier ja mehr Glück <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>Danke für jede Hilfe<br />
Godemit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966128</guid><dc:creator><![CDATA[Godemit]]></dc:creator><pubDate>Fri, 15 Oct 2010 15:49:54 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Speicherreservierung on Fri, 15 Oct 2010 15:54:12 GMT]]></title><description><![CDATA[<p>Da würde ich doch einmal stark annehmen, dass du irgendwo in Bereiche reinschreibst die dir nicht gehören. Das erzeugt undefiniertes Verhalten und führt dann zu solche merkwürdigen Sachen wie du sie beobachtest.</p>
<p>Da ein <code>double *x = new double[500];</code> aber allgemein sehr ungewöhnlich klingt: Hast du irgendeinen Grund, nicht std::vector zu benutzen? Sowohl hier als auch bei deinen anderen Speichereservierungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966131</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 15 Oct 2010 15:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Speicherreservierung on Fri, 15 Oct 2010 16:04:17 GMT]]></title><description><![CDATA[<p>Naja, und wie soll ich verhindern, dass &quot;new&quot; mir plötzlich &quot;verbotenen&quot; Speicher allokiert? Und vorallem warum nur bei einer bestimmten Größe? Ich dachte bis heute, dass da schon sinnvoller Speicher ausgesucht wird <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>warum ich std::vector nicht benutze? hmm. Ich hatte es teilweise schon benutzt aber fand es nicht so komfortabel. Ich denke auch mal, dass es nicht so schnell ist wie ein simples array.</p>
<p>Aber daran sollte es doch nicht liegen. Ich bin ja nicht der einzige, der arrays benutzt <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/1966136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966136</guid><dc:creator><![CDATA[Godemit]]></dc:creator><pubDate>Fri, 15 Oct 2010 16:04:17 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Speicherreservierung on Fri, 15 Oct 2010 16:08:12 GMT]]></title><description><![CDATA[<p>Godemit schrieb:</p>
<blockquote>
<p>Naja, und wie soll ich verhindern, dass &quot;new&quot; mir plötzlich &quot;verbotenen&quot; Speicher allokiert? Ich dachte bis heute, dass da schon sinnvoller Speicher ausgesucht wird <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>
</blockquote>
<p>Ich behaupte nicht, dass new etwas falsch macht, sondern dass du etwas falsch machst.</p>
<blockquote>
<p>warum ich std::vector nicht benutze? hmm. Ich hatte es teilweise schon benutzt aber fand es nicht so komfortabel.</p>
</blockquote>
<p>Deine Sache. Aber absolut unverständlich wie man manuelle Speicherverwaltung vorziehen kann.</p>
<blockquote>
<p>Ich denke auch mal, dass es nicht so schnell ist wie ein simples array.</p>
</blockquote>
<p>Blödsinn. vector macht genau das gleiche wie du. Aber im Zweifelsfall besser, weil die Programmierer von vector mehr Ahnung und vor allem Zeit haben.</p>
<blockquote>
<p>Aber daran sollte es doch nicht liegen.</p>
</blockquote>
<p>Oh, doch.</p>
<blockquote>
<p>Ich bin ja nicht der einzige, der arrays benutzt <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>Ohne Grund manuelle Speicherverwaltung? Da bist du einer der ganz wenigen. Das machen nur ahnungslose Anfänger. Und die machen es dann (wie du) sehr oft falsch. Oder C Programmierer, weil die keine Wahl haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966140</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 15 Oct 2010 16:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Speicherreservierung on Fri, 15 Oct 2010 16:10:08 GMT]]></title><description><![CDATA[<p>Godemit schrieb:</p>
<blockquote>
<p>ch hatte es teilweise schon benutzt aber fand es nicht so komfortabel.</p>
</blockquote>
<p>Weil? Statt new deklarierst du einfach den vector, statt delete lässt du ihn einfach stillschweigend aus dem Scope fallen. Sonst ist das alles ziemlich gleich...</p>
<blockquote>
<p>Ich denke auch mal, dass es nicht so schnell ist wie ein simples array.</p>
</blockquote>
<p>Merke dir eines: wenn es um Schnelligkeit von Code geht, sollte man in Fällen wie diesem nicht denken sondern messen. Und das auch nur wenn die Schelligkeit wirklich der kritische Punkt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966143</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 15 Oct 2010 16:10:08 GMT</pubDate></item></channel></rss>