<?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[einfache frage zu std::list]]></title><description><![CDATA[<p>also ich brauche eine liste die pointer enthält.<br />
Ich möchte natürlich werte einfügen und wieder löschen, nur hab ich anscheinend ein problem mit der liste oder den iteratoren, welche ich bisher noch nicht verwendet habe.<br />
kurzum ich bitte um eine fehleranalyse von folgendem code,<br />
compiler-error: unexpectedly finished</p>
<p>hier der code, natürlich stark vereinfacht, also fragen wieso ich eine liste mit int* statt nur int anlege sollten nicht aufkommen, es geht ums prinzip^^</p>
<p>bevor ich meine eigene vermutung anstelle erstmal der code:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;list&gt;

using namespace std;

int main()
{
    // LISTE ANLEGEN UND FÜLLEN
    std::list&lt;int*&gt; liste;
    liste.push_back(new int(53));
    liste.push_back(new int(22));
    liste.push_back(new int(33));
    liste.push_back(new int(16));
    liste.push_back(new int(12));
    liste.push_back(new int(49));
    liste.push_back(new int(35));
    liste.push_back(new int(12));

    // LISTE AUSGEBEN
    std::list&lt;int*&gt;::iterator iter;
    for(iter = liste.begin(); iter != liste.end(); iter++)
    {
        int* tmp = *iter;
        cout &lt;&lt; *tmp &lt;&lt; endl;
    }

    // WERT  12 LÖSCHEN
    for(iter = liste.begin(); iter != liste.end(); iter++)
    {
        int* tmp = *iter;
        if( *tmp = 12)
        {
            delete tmp;
            tmp = NULL;
        }
        liste.erase(iter);
    }

    //NOCHMAL AUSGEBEN
    for(iter = liste.begin(); iter != liste.end(); iter++)
    {
        int* tmp = *iter;
        cout &lt;&lt; *tmp &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<p>also ich denke dass die schleife beim löschen irgendwelche probleme hat wenn ich erase aufrufe, da ich aber nicht sicher im umgang mit lists und iteratoren bin lass ich mich gern mal belehren</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260387/einfache-frage-zu-std-list</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 04:29:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260387.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Feb 2010 14:48:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to einfache frage zu std::list on Thu, 04 Feb 2010 14:48:47 GMT]]></title><description><![CDATA[<p>also ich brauche eine liste die pointer enthält.<br />
Ich möchte natürlich werte einfügen und wieder löschen, nur hab ich anscheinend ein problem mit der liste oder den iteratoren, welche ich bisher noch nicht verwendet habe.<br />
kurzum ich bitte um eine fehleranalyse von folgendem code,<br />
compiler-error: unexpectedly finished</p>
<p>hier der code, natürlich stark vereinfacht, also fragen wieso ich eine liste mit int* statt nur int anlege sollten nicht aufkommen, es geht ums prinzip^^</p>
<p>bevor ich meine eigene vermutung anstelle erstmal der code:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;list&gt;

using namespace std;

int main()
{
    // LISTE ANLEGEN UND FÜLLEN
    std::list&lt;int*&gt; liste;
    liste.push_back(new int(53));
    liste.push_back(new int(22));
    liste.push_back(new int(33));
    liste.push_back(new int(16));
    liste.push_back(new int(12));
    liste.push_back(new int(49));
    liste.push_back(new int(35));
    liste.push_back(new int(12));

    // LISTE AUSGEBEN
    std::list&lt;int*&gt;::iterator iter;
    for(iter = liste.begin(); iter != liste.end(); iter++)
    {
        int* tmp = *iter;
        cout &lt;&lt; *tmp &lt;&lt; endl;
    }

    // WERT  12 LÖSCHEN
    for(iter = liste.begin(); iter != liste.end(); iter++)
    {
        int* tmp = *iter;
        if( *tmp = 12)
        {
            delete tmp;
            tmp = NULL;
        }
        liste.erase(iter);
    }

    //NOCHMAL AUSGEBEN
    for(iter = liste.begin(); iter != liste.end(); iter++)
    {
        int* tmp = *iter;
        cout &lt;&lt; *tmp &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<p>also ich denke dass die schleife beim löschen irgendwelche probleme hat wenn ich erase aufrufe, da ich aber nicht sicher im umgang mit lists und iteratoren bin lass ich mich gern mal belehren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850471</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Thu, 04 Feb 2010 14:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to einfache frage zu std::list on Thu, 04 Feb 2010 15:06:28 GMT]]></title><description><![CDATA[<p>shisha schrieb:</p>
<blockquote>
<p>hier der code, natürlich stark vereinfacht, also fragen wieso ich eine liste mit int* statt nur int anlege sollten nicht aufkommen, es geht ums prinzip^^</p>
</blockquote>
<p>Wäre meine erste Frage gewesen <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>Zum Kompilerfehler:<br />
Kannst du sagen bei welcher Zeile der auftritt? Und ist das auch wirklich die vollständige Fehlermeldung? Sieht fast mehr aus, als wenn der Kompiler gecrasht als dass dein Code falsch wäre.</p>
<p>Zusätzlicher Laufzeitfehler, welcher mir gerade auffiel (Zeile 36):<br />
<code>liste.erase(iter);</code><br />
Ab dem Zeitpunkt ist <code>iter</code> ungültig, da du das Element aus der Liste genommen hast. Im Schleifenkopf willst du den Iterator allerdings inkrementieren, was zu einem Laufzeitfehler führen würde. Um diesen Laufzeitfehler zu beheben, schau dir mal den Rückgabewert von<a href="http://www.cplusplus.com/reference/stl/list/erase/" rel="nofollow"> <code>std::list::erase</code> </a>an <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850492</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 04 Feb 2010 15:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to einfache frage zu std::list on Thu, 04 Feb 2010 15:11:47 GMT]]></title><description><![CDATA[<p>Zudem: guck dir mal Zeile 31 an <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>Du weist *tmp den Wert 12 zu, die Bedingung ist also immer wahr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850498</guid><dc:creator><![CDATA[if(a=b) != if(a==b)]]></dc:creator><pubDate>Thu, 04 Feb 2010 15:11:47 GMT</pubDate></item></channel></rss>