<?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[STL Vector erase() lässt das PRogramm abstürzen.]]></title><description><![CDATA[<p>Hallo ...<br />
Langsam beginne ich die kleinen fiesen Dinger zu hassen, die sich Vektoren nennen. Erst das Problem wie sie überhaupt funktionieren.. habt ihr mir erfoglreich beibringen können. Dann das Problem sie per Referenz zu füllen: 1A, ihr seid Götter.^^</p>
<p>Jetzt kommt die Königsdisziplin: Sie wieder zu löschen. &gt;_&lt;</p>
<p>Nun... dafür benutze ich persönlich erase(); was auch größtenteils funktioniert. Aber - aus Welchem Grund auch immer - stürzt das Programm plötzlich ab und gibt - wenn ich &quot;Glück&quot; habe - sogar die Windowswarnmeldung aus, dass das Programm einen Fehler festgestellt habe. Ansonsten passiert gar nichts - Das Programm beendet sich einfach nur.</p>
<p>Die betreffende Funktion wäre dnan folgende:</p>
<pre><code class="language-cpp">bool particle_think(vector&lt;particle* &gt; &amp;arr, bool delete_if_error_occur) {
  int i=0;

  vector&lt;particle* &gt;::iterator iter;

  if(arr.empty()) {
    return false;
  } 

  for(iter=arr.begin();iter!=arr.end();iter++)
  {
    try {

      if((*iter)-&gt;is_dying()==true) {
          delete (*iter);
          arr.erase(iter);
          if(arr.empty()) {
            return false;
          }
      }

      if((*iter)-&gt;think()==false &amp;&amp; delete_if_error_occur==true) {
      (*iter)-&gt;let_it_die();
      }
    } catch (...) {
       MessageBox(NULL,&quot;Error occured in 'patricle::think()'.&quot;,&quot;Fatal Error!&quot;,MB_OK | MB_ICONINFORMATION);
    }
    i++;
  }

  return true;
}
</code></pre>
<p>Die Funktion lässt die Partikel einige Berechnungen usw durchführen. Eventuell 'stirbt' der Partikel dabei und soll aus dem Vektor und dem speicher entfernt werden.... ja.. dabei passiert der Fehler...</p>
<p>Meine Frage: Welchen dumm-naiven Fehler habe ich diesmal wieder fabriziert? Ich verzweifel langsam an dne Mistdingern...&gt;_&lt;</p>
<p>this-&gt;thanks();</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201472/stl-vector-erase-lässt-das-programm-abstürzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 02:46:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201472.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Dec 2007 14:28:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 14:28:00 GMT]]></title><description><![CDATA[<p>Hallo ...<br />
Langsam beginne ich die kleinen fiesen Dinger zu hassen, die sich Vektoren nennen. Erst das Problem wie sie überhaupt funktionieren.. habt ihr mir erfoglreich beibringen können. Dann das Problem sie per Referenz zu füllen: 1A, ihr seid Götter.^^</p>
<p>Jetzt kommt die Königsdisziplin: Sie wieder zu löschen. &gt;_&lt;</p>
<p>Nun... dafür benutze ich persönlich erase(); was auch größtenteils funktioniert. Aber - aus Welchem Grund auch immer - stürzt das Programm plötzlich ab und gibt - wenn ich &quot;Glück&quot; habe - sogar die Windowswarnmeldung aus, dass das Programm einen Fehler festgestellt habe. Ansonsten passiert gar nichts - Das Programm beendet sich einfach nur.</p>
<p>Die betreffende Funktion wäre dnan folgende:</p>
<pre><code class="language-cpp">bool particle_think(vector&lt;particle* &gt; &amp;arr, bool delete_if_error_occur) {
  int i=0;

  vector&lt;particle* &gt;::iterator iter;

  if(arr.empty()) {
    return false;
  } 

  for(iter=arr.begin();iter!=arr.end();iter++)
  {
    try {

      if((*iter)-&gt;is_dying()==true) {
          delete (*iter);
          arr.erase(iter);
          if(arr.empty()) {
            return false;
          }
      }

      if((*iter)-&gt;think()==false &amp;&amp; delete_if_error_occur==true) {
      (*iter)-&gt;let_it_die();
      }
    } catch (...) {
       MessageBox(NULL,&quot;Error occured in 'patricle::think()'.&quot;,&quot;Fatal Error!&quot;,MB_OK | MB_ICONINFORMATION);
    }
    i++;
  }

  return true;
}
</code></pre>
<p>Die Funktion lässt die Partikel einige Berechnungen usw durchführen. Eventuell 'stirbt' der Partikel dabei und soll aus dem Vektor und dem speicher entfernt werden.... ja.. dabei passiert der Fehler...</p>
<p>Meine Frage: Welchen dumm-naiven Fehler habe ich diesmal wieder fabriziert? Ich verzweifel langsam an dne Mistdingern...&gt;_&lt;</p>
<p>this-&gt;thanks();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428065</guid><dc:creator><![CDATA[makkurona]]></dc:creator><pubDate>Sun, 30 Dec 2007 14:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 14:45:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">arr.erase(iter);
</code></pre>
<p>macht den Iterator iter ungültig!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428068</guid><dc:creator><![CDATA[deha]]></dc:creator><pubDate>Sun, 30 Dec 2007 14:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 14:47:36 GMT]]></title><description><![CDATA[<p>Das heißt jetzt genau? ^^&quot;</p>
<p>Wei...es löscht ja ein paar..aber irgenwann strüzt es dann eben ab..^^&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428070</guid><dc:creator><![CDATA[makkurona]]></dc:creator><pubDate>Sun, 30 Dec 2007 14:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 14:48:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ein erase auf einen vector macht deinen laufiterator iter ungültig. Glücklicherweise gibt erase den nächsten gültigen Iterator zurück.</p>
<pre><code class="language-cpp">for(iter=arr.begin();iter!=arr.end();)
  {
    try {

      if((*iter)-&gt;is_dying()) 
      {
          delete (*iter);
          iter = arr.erase(iter);
          if(arr.empty()) return false;
      } else ++iter;

      if((*iter)-&gt;think()==false &amp;&amp; delete_if_error_occur==true) {
      (*iter)-&gt;let_it_die();
      }
    } catch (...) {
       MessageBox(NULL,&quot;Error occured in 'patricle::think()'.&quot;,&quot;Fatal Error!&quot;,MB_OK | MB_ICONINFORMATION);
    }
    i++;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1428071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428071</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Sun, 30 Dec 2007 14:48:40 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 15:03:09 GMT]]></title><description><![CDATA[<p>Mhh...das ganze schießt mein Programm jetzt schon beim Start ab.</p>
<p>Es kompiliert Fehlerfrei, aber will nicht ganz laufen. Es startet..und stürzt ab. *seufz* Ich wusste immer das mir Vectoren nur Probleme machen werden. &gt;-&lt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428075</guid><dc:creator><![CDATA[makkurona]]></dc:creator><pubDate>Sun, 30 Dec 2007 15:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 15:09:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for(iter=arr.begin();iter!=arr.end();)
  {
    try {

      if((*iter)-&gt;is_dying()) 
      {
          delete (*iter);
          iter = arr.erase(iter);
          if(arr.empty()) return false;
      } else {
          if((*iter)-&gt;think()==false &amp;&amp; delete_if_error_occur==true) {
              (*iter)-&gt;let_it_die();
          }
          ++iter;
      }
    } catch (...) {
       MessageBox(NULL,&quot;Error occured in 'patricle::think()'.&quot;,&quot;Fatal Error!&quot;,MB_OK | MB_ICONINFORMATION);
    }
    i++;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1428077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428077</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 30 Dec 2007 15:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 15:15:49 GMT]]></title><description><![CDATA[<p>Ah..Wunderbar.</p>
<p>Das funktioniert einwandfrei!<br />
Ich bedanke mich recht herzlichst bei euch allen!</p>
<p>Vielen, vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428080</guid><dc:creator><![CDATA[makkurona]]></dc:creator><pubDate>Sun, 30 Dec 2007 15:15:49 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector erase() lässt das PRogramm abstürzen. on Sun, 30 Dec 2007 15:34:18 GMT]]></title><description><![CDATA[<p>Ich würde statt erase lieber remove benutzen und am Schluß nur einmal erase mit einer geeigneten Range aufrufen. Das ist im worst-case um einiges schneller und dürfte auch im Mittel um einiges schneller sein. Besonders wenn es viele Partikel sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428086</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 30 Dec 2007 15:34:18 GMT</pubDate></item></channel></rss>