<?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[Speicherreservierung läuft Amok]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Struktur</p>
<pre><code>typedef struct planeten_TYP
{	
	int	anzahl;
	char	typ[500];
} struck_planeten;
</code></pre>
<p>am Anfang reservier ich mir 1x die Sruktur</p>
<pre><code>struck_planeten     *planeten;
planeten=new struck_planeten[1];
planeten[0].anzahl = 1;
</code></pre>
<p>Im Programm dann, möchte ich in einer Schleife noch mehr reservieren</p>
<pre><code>int i=0;
while (i&lt;5000) //5000 ist ein Beispiel, es können beliebig viele sein
{
  struck_planeten *tmp_obj = new struck_planeten[planeten[0].anzahl+1];
  int anzahl_merker = planeten[0].anzahl+1;
  for(unsigned int i2 = 0; i2 &lt; planeten[0].anzahl; ++i2)
  {
	tmp_obj[i2] = planeten[i2]; 
  }
  planeten = NULL;
  delete [] planeten;
  planeten = new struck_planeten[anzahl_merker];
  for(i2 = 0; i2 &lt; anzahl_merker; ++i2)
  {
	planeten[i2] = tmp_obj[i2];
  }
  tmp_obj = NULL;
  delete [] tmp_obj;
  planeten[0].anzahl = anzahl_merker;
  i++;
}
</code></pre>
<p>aber genau in dieser Schleife läuft das Prog Amok und reserviert so viel Speicher, bis der Rechner keinen mehr hat. Bei mir ist es bei 2,1GB angeknallt, was ca 4300x die Struktur war.</p>
<p>Irgendwo ist mein Denkfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/122826/speicherreservierung-läuft-amok</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 08:56:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/122826.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Oct 2005 13:33:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 13:33:31 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Struktur</p>
<pre><code>typedef struct planeten_TYP
{	
	int	anzahl;
	char	typ[500];
} struck_planeten;
</code></pre>
<p>am Anfang reservier ich mir 1x die Sruktur</p>
<pre><code>struck_planeten     *planeten;
planeten=new struck_planeten[1];
planeten[0].anzahl = 1;
</code></pre>
<p>Im Programm dann, möchte ich in einer Schleife noch mehr reservieren</p>
<pre><code>int i=0;
while (i&lt;5000) //5000 ist ein Beispiel, es können beliebig viele sein
{
  struck_planeten *tmp_obj = new struck_planeten[planeten[0].anzahl+1];
  int anzahl_merker = planeten[0].anzahl+1;
  for(unsigned int i2 = 0; i2 &lt; planeten[0].anzahl; ++i2)
  {
	tmp_obj[i2] = planeten[i2]; 
  }
  planeten = NULL;
  delete [] planeten;
  planeten = new struck_planeten[anzahl_merker];
  for(i2 = 0; i2 &lt; anzahl_merker; ++i2)
  {
	planeten[i2] = tmp_obj[i2];
  }
  tmp_obj = NULL;
  delete [] tmp_obj;
  planeten[0].anzahl = anzahl_merker;
  i++;
}
</code></pre>
<p>aber genau in dieser Schleife läuft das Prog Amok und reserviert so viel Speicher, bis der Rechner keinen mehr hat. Bei mir ist es bei 2,1GB angeknallt, was ca 4300x die Struktur war.</p>
<p>Irgendwo ist mein Denkfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888858</guid><dc:creator><![CDATA[BlackWolf]]></dc:creator><pubDate>Mon, 10 Oct 2005 13:33:31 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 13:35:36 GMT]]></title><description><![CDATA[<p>Debugger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888860</guid><dc:creator><![CDATA[MKF]]></dc:creator><pubDate>Mon, 10 Oct 2005 13:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:04:14 GMT]]></title><description><![CDATA[<p>Der Debugger sagt gar nix, da läuft alles ganz normal.</p>
<p>Normal müsste 1x reservieren 504 byte belegen, bei mir sind es aber 504 KB.<br />
Das ganze dann mal 5000 = 2,4 GB an Speicher anstatt 2,4 MB.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888884</guid><dc:creator><![CDATA[BlackWolf]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:06:16 GMT]]></title><description><![CDATA[<p>also erstmal, wozu machst du ein Feld der Länge 1? Da kann ma ndeoch gleich ein normales Objekt erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888889</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:09:22 GMT]]></title><description><![CDATA[<p>Das habe ich der übersicht wegen gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888893</guid><dc:creator><![CDATA[BlackWolf]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:09:31 GMT]]></title><description><![CDATA[<p>warum programmierst du eigentlich C/C++? mit C++ ists doch viel einfacher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888894</guid><dc:creator><![CDATA[zwischenfrage]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:09:40 GMT]]></title><description><![CDATA[<p>BlackWolf schrieb:</p>
<blockquote>
<p>...<br />
[c++]<br />
...<br />
planeten = NULL;<br />
delete [] planeten;<br />
planeten = new struck_planeten[anzahl_merker];<br />
...<br />
[/c++]<br />
...</p>
</blockquote>
<p>Hier wird kein Speicher freigegeben. Musst die ersten beiden Zeilen vertauschen, dann sollte es funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888895</guid><dc:creator><![CDATA[gurru]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:12:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">tmp_obj = NULL; // &lt;-- was soll das hier?
delete [] tmp_obj;
</code></pre>
<p>liegt es evtl daran?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888898</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:14:28 GMT]]></title><description><![CDATA[<p>Danke, jetzt geht es, habe nur die Zeilen getauscht und alles ist normal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888900</guid><dc:creator><![CDATA[BlackWolf]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 14:15:57 GMT]]></title><description><![CDATA[<p>Die letzten beiden Beiträge zeigen's schon, wenn du den Pointer VOR dem Löschen auf NULL setzt, dann hast du ein Ressourcenleck. NACH dem löschen kannst du den Pointer auf NULL setzen, zur Sicherheit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/888901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/888901</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 10 Oct 2005 14:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 16:46:38 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<p>NACH dem löschen kannst du den Pointer auf NULL setzen, zur Sicherheit.</p>
</blockquote>
<p>dann ist aber auch schon wieder etwas schiefgelaufen, wenn ein zeiger zweimal deleted wird. deshalb sollte man einen zeiger nicht auf 0 setzen, damit soetwas entdeckt wird.</p>
<p>btw gibt es &quot;NULL&quot; in c++ eigentlich nicht.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889040</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Mon, 10 Oct 2005 16:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 16:51:25 GMT]]></title><description><![CDATA[<blockquote>
<p>btw gibt es &quot;NULL&quot; in c++ eigentlich nicht.</p>
</blockquote>
<p>aber eigentlich doch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889042</guid><dc:creator><![CDATA[wirsch]]></dc:creator><pubDate>Mon, 10 Oct 2005 16:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 17:21:31 GMT]]></title><description><![CDATA[<p>wirsch schrieb:</p>
<blockquote>
<p>aber eigentlich doch</p>
</blockquote>
<p>wenn man sich ein makro baut:</p>
<p>Die C++ Programmiersprache, Seite 96 schrieb:</p>
<blockquote>
<p>In C war es populär, ein Makro NULL zu definieren, um den Nullzeiger zu representieren. [...] Wenn Sie meinen, NULL definieren zu müssen, dann...</p>
</blockquote>
<p>Folglich gibt es kein NULL in C++.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889058</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Mon, 10 Oct 2005 17:21:31 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 17:53:23 GMT]]></title><description><![CDATA[<p>Im C++ Standard steht das hier:</p>
<p>#define NULL 0</p>
<p>Also es gibt NULL, auch in C++.<br />
Eine Diskussion über NULL oder 0 gibt's in den FAQ <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>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889080</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Mon, 10 Oct 2005 17:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 18:08:38 GMT]]></title><description><![CDATA[<p>terraner schrieb:</p>
<blockquote>
<p>dann ist aber auch schon wieder etwas schiefgelaufen, wenn ein zeiger zweimal deleted wird. deshalb sollte man einen zeiger nicht auf 0 setzen, damit soetwas entdeckt wird.</p>
</blockquote>
<p>Auf 0 setzen ist durchaus legitim und oft sehr zu empfehlen. Wenn man in einer Klasse die Invariante &quot;Pointer ist entweder gültig oder 0&quot; festlegt, dann kann man ihn sofort nach dem delete auf 0 setzen und gewährleistet damit die Sicherheit der Klasse beim Auftreten von Exceptions.</p>
<pre><code class="language-cpp">struct some_stupid_class {
  A *a;
  some_stupid_class(): a(new A[10]) { }
  ~some_stupid_class() { delete[] a; }
  void resize(int n) {
    delete[] a;
    a = 0;
    a = new A[n];
  }
};
</code></pre>
<p>Wenn nun der Constructor von A eine Exception wirft und du das &quot;a=0&quot; weglässt, crasht das Ding im Destruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889089</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Mon, 10 Oct 2005 18:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 19:07:49 GMT]]></title><description><![CDATA[<p>Ringding schrieb:</p>
<blockquote>
<p>Auf 0 setzen ist durchaus legitim und oft sehr zu empfehlen. Wenn man in einer Klasse die Invariante &quot;Pointer ist entweder gültig oder 0&quot; festlegt, dann kann man ihn sofort nach dem delete auf 0 setzen und gewährleistet damit die Sicherheit der Klasse beim Auftreten von Exceptions.</p>
<pre><code class="language-cpp">struct some_stupid_class {
  A *a;
  some_stupid_class(): a(new A[10]) { }
  ~some_stupid_class() { delete[] a; }
  void resize(int n) {
    delete[] a;
    a = 0;
    a = new A[n];
  }
};
</code></pre>
<p>Wenn nun der Constructor von A eine Exception wirft und du das &quot;a=0&quot; weglässt, crasht das Ding im Destruktor.</p>
</blockquote>
<p>stimmt. aber wie oft schreibt man schon selber eine klasse, die dynamisch speicher anfordert? in 99% der fälle würde ich dieses problem der stl/... überlassen</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889125</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Mon, 10 Oct 2005 19:07:49 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 19:07:28 GMT]]></title><description><![CDATA[<p>nie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889127</guid><dc:creator><![CDATA[............]]></dc:creator><pubDate>Mon, 10 Oct 2005 19:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 19:11:39 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Eine Diskussion über NULL oder 0 gibt's in den FAQ <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>*davonschleich*</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889132</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Mon, 10 Oct 2005 19:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 19:38:00 GMT]]></title><description><![CDATA[<p>Ringding schrieb:</p>
<blockquote>
<p>terraner schrieb:</p>
<blockquote>
<p>dann ist aber auch schon wieder etwas schiefgelaufen, wenn ein zeiger zweimal deleted wird. deshalb sollte man einen zeiger nicht auf 0 setzen, damit soetwas entdeckt wird.</p>
</blockquote>
<p>Auf 0 setzen ist durchaus legitim und oft sehr zu empfehlen. Wenn man in einer Klasse die Invariante &quot;Pointer ist entweder gültig oder 0&quot; festlegt, dann kann man ihn sofort nach dem delete auf 0 setzen und gewährleistet damit die Sicherheit der Klasse beim Auftreten von Exceptions.</p>
<pre><code class="language-cpp">struct some_stupid_class {
  A *a;
  some_stupid_class(): a(new A[10]) { }
  ~some_stupid_class() { delete[] a; }
  void resize(int n) {
    delete[] a;
    a = 0;
    a = new A[n];
  }
};
</code></pre>
<p>Wenn nun der Constructor von A eine Exception wirft und du das &quot;a=0&quot; weglässt, crasht das Ding im Destruktor.</p>
</blockquote>
<p>könnte sein, daß man durch umsortieren diese zuweisung immer wegkriegt.</p>
<pre><code class="language-cpp">struct some_stupid_class {
  A *a;
  some_stupid_class(): a(new A[10]) { }
  ~some_stupid_class() { delete[] a; }
  void resize(int n) {
    A* newA=new A[n];
    a=newA;
    delete[] newA;
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/889171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889171</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 10 Oct 2005 19:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung läuft Amok on Mon, 10 Oct 2005 21:23:24 GMT]]></title><description><![CDATA[<p>Ist aber auch nicht kürzer :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/889249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/889249</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Mon, 10 Oct 2005 21:23:24 GMT</pubDate></item></channel></rss>