<?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[iterator- oder speicher-problem]]></title><description><![CDATA[<p>folgender Code:</p>
<pre><code class="language-cpp">iter = m_PossibleOutputs[n].descriptors.begin();
      iterend = m_PossibleOutputs[n].descriptors.end();

      while( iter != iterend )
      {
        if( deleteIterator )
        {
          iter = m_PossibleOutputs[n].descriptors.erase( iter );
          deleteIterator = false;
        }
        else
        {
          iter ++;
          originb4 = origincur;
        }

        ...

        if( Equal( originb4, origincur ) )
        {
          ...
          timeOutput = new DifferentOutputs;
          timeOutput-&gt;refferenceUID = m_PossibleOutputs[n].refferenceUID;
          timeOutput-&gt;normale = m_PossibleOutputs[n].normale;
          timeOutput-&gt;pixelSpacing = m_PossibleOutputs[n].pixelSpacing;
          timeOutput-&gt;sliceSpacing = m_PossibleOutputs[n].sliceSpacing;
          timeOutput-&gt;numberOfSlices = - 1;
          timeOutput-&gt;numberOfTimeSlices = - 1;
          timeOutput-&gt;differentTimeSlices = false;
          timeOutput-&gt;descriptors.clear();
          timeOutput-&gt;descriptors.push_back( (*iter) );
        }
        else
        {
          ...
          m_PossibleOutputs.push_back( (*timeOutput) );
          delete timeOutput;
          timeOutput = NULL;
        }
        ...
       }
</code></pre>
<p>Erweiterung:<br />
-iter und iterend sind Iteratoren;<br />
-bei DifferentOutputs handelt es sich um eine Struktur;<br />
-timeOutput ist ein Zeiger auf DifferentOutputs;<br />
-bei m_PossibleOutputs um einen Vector von DifferentOutputs;<br />
-bei m_PossibleOutputs.descriptors handelt es sich um eine Liste;<br />
-in den ... befindet sich kein quelltext, der mit iter, iterend oder timeOutput zu tun hat</p>
<p>Problem:<br />
wenn ich zum zweiten mal timeOutput neu erstelle und anschließend per &quot;m_PossibleOutputs.push_back( (*timeOutput) );&quot; speichere, ist mein iter hin.<br />
ich habe nummern für die elemente, über die der iterator läuft. wenn ich mir vor der zeile &quot;m_PossibleOutputs.push_back( (*timeOutput) );&quot; die restlichen elemente zwischen iter und iterend ausgeben lasse, dann sehen die zum beispiel so aus:</p>
<p>266<br />
267<br />
268<br />
269<br />
270<br />
271</p>
<p>lasse ich mir die restlichen elemente nach dem aufruf ausgeben, dann sieht das so aus:</p>
<p>266<br />
265<br />
264<br />
263<br />
262<br />
261</p>
<p>Das läuft dann bis zum anfang zurück und weil davor nichts mehr kommt, booom.</p>
<p>//Edit: Codetags hinzugefügt. In Zukunft bitte selber dran denken! (evilissimo)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/187403/iterator-oder-speicher-problem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 15:28:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187403.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Jul 2007 11:35:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 12:52:03 GMT]]></title><description><![CDATA[<p>folgender Code:</p>
<pre><code class="language-cpp">iter = m_PossibleOutputs[n].descriptors.begin();
      iterend = m_PossibleOutputs[n].descriptors.end();

      while( iter != iterend )
      {
        if( deleteIterator )
        {
          iter = m_PossibleOutputs[n].descriptors.erase( iter );
          deleteIterator = false;
        }
        else
        {
          iter ++;
          originb4 = origincur;
        }

        ...

        if( Equal( originb4, origincur ) )
        {
          ...
          timeOutput = new DifferentOutputs;
          timeOutput-&gt;refferenceUID = m_PossibleOutputs[n].refferenceUID;
          timeOutput-&gt;normale = m_PossibleOutputs[n].normale;
          timeOutput-&gt;pixelSpacing = m_PossibleOutputs[n].pixelSpacing;
          timeOutput-&gt;sliceSpacing = m_PossibleOutputs[n].sliceSpacing;
          timeOutput-&gt;numberOfSlices = - 1;
          timeOutput-&gt;numberOfTimeSlices = - 1;
          timeOutput-&gt;differentTimeSlices = false;
          timeOutput-&gt;descriptors.clear();
          timeOutput-&gt;descriptors.push_back( (*iter) );
        }
        else
        {
          ...
          m_PossibleOutputs.push_back( (*timeOutput) );
          delete timeOutput;
          timeOutput = NULL;
        }
        ...
       }
</code></pre>
<p>Erweiterung:<br />
-iter und iterend sind Iteratoren;<br />
-bei DifferentOutputs handelt es sich um eine Struktur;<br />
-timeOutput ist ein Zeiger auf DifferentOutputs;<br />
-bei m_PossibleOutputs um einen Vector von DifferentOutputs;<br />
-bei m_PossibleOutputs.descriptors handelt es sich um eine Liste;<br />
-in den ... befindet sich kein quelltext, der mit iter, iterend oder timeOutput zu tun hat</p>
<p>Problem:<br />
wenn ich zum zweiten mal timeOutput neu erstelle und anschließend per &quot;m_PossibleOutputs.push_back( (*timeOutput) );&quot; speichere, ist mein iter hin.<br />
ich habe nummern für die elemente, über die der iterator läuft. wenn ich mir vor der zeile &quot;m_PossibleOutputs.push_back( (*timeOutput) );&quot; die restlichen elemente zwischen iter und iterend ausgeben lasse, dann sehen die zum beispiel so aus:</p>
<p>266<br />
267<br />
268<br />
269<br />
270<br />
271</p>
<p>lasse ich mir die restlichen elemente nach dem aufruf ausgeben, dann sieht das so aus:</p>
<p>266<br />
265<br />
264<br />
263<br />
262<br />
261</p>
<p>Das läuft dann bis zum anfang zurück und weil davor nichts mehr kommt, booom.</p>
<p>//Edit: Codetags hinzugefügt. In Zukunft bitte selber dran denken! (evilissimo)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328436</guid><dc:creator><![CDATA[hopsekey]]></dc:creator><pubDate>Thu, 19 Jul 2007 12:52:03 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 11:41:38 GMT]]></title><description><![CDATA[<p>Was für einen Container verwendest du? Bei einem vector&lt;&gt; kann es passieren, daß der push_back()-Aufruf die Kapazität erhöhen muß - dabei werden alle noch vorhandenen Iteratoren ungültig.</p>
<p>PS: sfds</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328443</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Jul 2007 11:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 11:53:24 GMT]]></title><description><![CDATA[<p>ich verwende den std::vector.<br />
es wird wahrscheinlich daran liegen. was kann man dagegen unternehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328455</guid><dc:creator><![CDATA[hopsekey]]></dc:creator><pubDate>Thu, 19 Jul 2007 11:53:24 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 12:06:42 GMT]]></title><description><![CDATA[<p>Wenn du weißt wie groß der Vektor wird gibt's <code>vector&lt;&gt;::reserve</code> , ansonsten Indices statt Iteratoren speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328469</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 19 Jul 2007 12:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 12:06:47 GMT]]></title><description><![CDATA[<p>Entweder die notwendigen Iteratoren nach dem push_back() neu beschaffen oder umsteigen auf einen anderen Container (list&lt;&gt; zerstört keine Iteratoren, wenn es nicht sein muß).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328468</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Jul 2007 12:06:47 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 12:08:03 GMT]]></title><description><![CDATA[<p>hopsekey schrieb:</p>
<blockquote>
<p>ich verwende den std::vector.<br />
es wird wahrscheinlich daran liegen. was kann man dagegen unternehmen?</p>
</blockquote>
<p>Gleich auf die richtige Größe setzen, oder Iterator neu holen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328471</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 19 Jul 2007 12:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 12:12:24 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> dieser doofe fehler hat mich unzählige nerven und 1 1/2 tage gekostet.</p>
<p>ALSO EIN RIESEN DANKESCHÖN für den Tipp.</p>
<p>Ich habe es jetzt so gelöst.</p>
<pre><code class="language-cpp">...
tempDescriptor = (*iter);
m_PossibleOutputs.push_back( (*timeOutput) );
iter = m_PossibleOutputs[n].descriptors.begin();
iterend = m_PossibleOutputs[n].descriptors.end();
while( (*iter) != tempDescriptor ) iter++;
...
</code></pre>
<p>Und es funktioniert. Jetzt kann man noch über eine schönere Variante reden. <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>list&lt;&gt; zerstört keine Iteratoren, wenn es nicht sein muß</p>
</blockquote>
<p>aber sie macht es trotzdem irgendwann, irgendwie mal? den fall müsste ich abfangen.</p>
<blockquote>
<p>weißt wie groß der Vektor wird</p>
</blockquote>
<p>leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328475</guid><dc:creator><![CDATA[hopsekey]]></dc:creator><pubDate>Thu, 19 Jul 2007 12:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to iterator- oder speicher-problem on Thu, 19 Jul 2007 12:24:32 GMT]]></title><description><![CDATA[<p>hopsekey schrieb:</p>
<blockquote>
<blockquote>
<p>list&lt;&gt; zerstört keine Iteratoren, wenn es nicht sein muß</p>
</blockquote>
<p>aber sie macht es trotzdem irgendwann, irgendwie mal? den fall müsste ich abfangen.</p>
</blockquote>
<p>Ja, wenn du das betreffende Element löschst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1328489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1328489</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 19 Jul 2007 12:24:32 GMT</pubDate></item></channel></rss>