<?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[Fehler: list iterator not dereferencable]]></title><description><![CDATA[<p>Hallo,<br />
Ich habe zwei Klassen (AnimationImages und Animation) Die erste speichert die Bilder für mehrere Animationen und die zweite ist das animierte Sprite:</p>
<pre><code class="language-cpp">#include &lt;SFML/Graphics.hpp&gt;
#include &lt;vector&gt;
#include &lt;list&gt;

namespace Animation {
	class AnimationImages  {
	private:
		bool Geladen;
		std::vector&lt;std::list&lt;sf::Image&gt;&gt; Frames;
	public:
		AnimationImages();
		void Load(std::string AnimName, __int16 x, std::vector&lt;unsigned __int16&gt; y);
		std::list&lt;sf::Image&gt;::iterator&amp; GetBegin(int AnimID);
		std::list&lt;sf::Image&gt;::iterator&amp; GetEnd(int AnimID);
	};

	AnimationImages::AnimationImages() {}
	void AnimationImages::Load(std::string AnimName, __int16 x, std::vector&lt;unsigned __int16&gt; y) {
		//...
		Geladen = true;
	}
	std::list&lt;sf::Image&gt;::iterator&amp; AnimationImages::GetBegin(int AnimID) {
		return(Frames[AnimID].begin());
	}
	std::list&lt;sf::Image&gt;::iterator&amp; AnimationImages::GetEnd(int AnimID) {
		return(Frames[AnimID].end());
	}

	class Animation : public sf::Sprite, public sf::Thread {
	public:
		__int16 AnimID;
		std::list&lt;sf::Image&gt;::iterator CurrImg; //Iterator auf das aktuelle Bild
		AnimationImages* Frames; //Pointer auf die aktuelle Animation
		Animation();
		virtual void Run() override;
	};

	Animation::Animation() {}
	void Animation::Run() {
		CurrImg = Frames-&gt;GetBegin(AnimID);
		while(true) {
			if(Frames-&gt;BilderGeladen()) {
				SetImage(*CurrImg);
				if(CurrImg == Frames-&gt;GetEnd(AnimID)) {
					CurrImg = Frames-&gt;GetBegin(AnimID);
				}
				else {
					CurrImg++;
				}
			}	
		}
	}
}
</code></pre>
<p>Wenn ich das Programm starte dann tritt der Fehler &quot;list iterator not dereferencable&quot; auf. Per Debugger habe ich herausgefunden, das dies durch Zeile 43 ausgelöst wird, leider weiß ich aber nicht warum. Weiß jemand von Euch, wo der Fehler liegt?</p>
<p>Danke schon im Voraus.<br />
mfg<br />
mr x</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238862/fehler-list-iterator-not-dereferencable</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 17:35:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238862.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Apr 2009 17:32:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Thu, 16 Apr 2009 17:32:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich habe zwei Klassen (AnimationImages und Animation) Die erste speichert die Bilder für mehrere Animationen und die zweite ist das animierte Sprite:</p>
<pre><code class="language-cpp">#include &lt;SFML/Graphics.hpp&gt;
#include &lt;vector&gt;
#include &lt;list&gt;

namespace Animation {
	class AnimationImages  {
	private:
		bool Geladen;
		std::vector&lt;std::list&lt;sf::Image&gt;&gt; Frames;
	public:
		AnimationImages();
		void Load(std::string AnimName, __int16 x, std::vector&lt;unsigned __int16&gt; y);
		std::list&lt;sf::Image&gt;::iterator&amp; GetBegin(int AnimID);
		std::list&lt;sf::Image&gt;::iterator&amp; GetEnd(int AnimID);
	};

	AnimationImages::AnimationImages() {}
	void AnimationImages::Load(std::string AnimName, __int16 x, std::vector&lt;unsigned __int16&gt; y) {
		//...
		Geladen = true;
	}
	std::list&lt;sf::Image&gt;::iterator&amp; AnimationImages::GetBegin(int AnimID) {
		return(Frames[AnimID].begin());
	}
	std::list&lt;sf::Image&gt;::iterator&amp; AnimationImages::GetEnd(int AnimID) {
		return(Frames[AnimID].end());
	}

	class Animation : public sf::Sprite, public sf::Thread {
	public:
		__int16 AnimID;
		std::list&lt;sf::Image&gt;::iterator CurrImg; //Iterator auf das aktuelle Bild
		AnimationImages* Frames; //Pointer auf die aktuelle Animation
		Animation();
		virtual void Run() override;
	};

	Animation::Animation() {}
	void Animation::Run() {
		CurrImg = Frames-&gt;GetBegin(AnimID);
		while(true) {
			if(Frames-&gt;BilderGeladen()) {
				SetImage(*CurrImg);
				if(CurrImg == Frames-&gt;GetEnd(AnimID)) {
					CurrImg = Frames-&gt;GetBegin(AnimID);
				}
				else {
					CurrImg++;
				}
			}	
		}
	}
}
</code></pre>
<p>Wenn ich das Programm starte dann tritt der Fehler &quot;list iterator not dereferencable&quot; auf. Per Debugger habe ich herausgefunden, das dies durch Zeile 43 ausgelöst wird, leider weiß ich aber nicht warum. Weiß jemand von Euch, wo der Fehler liegt?</p>
<p>Danke schon im Voraus.<br />
mfg<br />
mr x</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696810</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Thu, 16 Apr 2009 17:51:41 GMT]]></title><description><![CDATA[<p>Du hast dort eine Endlosschleife, und es scheint so, als ob die Anweisung im <code>else</code> -Zweig zu oft ausgeführt würde, wodurch sich <code>CurrImg</code> ausserhalb der gültigen Iterator-Range befindet.</p>
<p>Es wäre nächstes Mal nett, du würdest gleich die relevanten Typen (hier <code>CurrImg</code> ) angeben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696822</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Thu, 16 Apr 2009 17:52:41 GMT]]></title><description><![CDATA[<p>Der Iterator zeigt auf eine ungültige Stelle. Entweder das Ende oder auf ein Objekt, welches zerstört wurde. Irgendwo hat es daher einen Logikfehler in deinem Programm.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>,<br />
Der Typ ist angegeben, nur schwer zu finden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696823</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:52:41 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Fri, 17 Apr 2009 06:54:40 GMT]]></title><description><![CDATA[<blockquote>
<p>Du hast dort eine Endlosschleife, und es scheint so, als ob die Anweisung im else-Zweig zu oft ausgeführt würde</p>
</blockquote>
<p>Ich habe probehalber diese Anweisung schon weggelassen. Selber Fehler...</p>
<p>Beim Debuggen habe ich noch herausgefunden, das der Iterator schon in Zeile 40 ungültig ist. Der Iterator, den die Funktion GetBegin zurückgibt, ist inerhalb dieser Funktion gültig. der zurückgegebene Iterator ist jedoch ungültig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Ich kann mir aber nicht erklären, warum...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697025</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Fri, 17 Apr 2009 06:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Fri, 17 Apr 2009 07:16:01 GMT]]></title><description><![CDATA[<p>Wird der Frames-Zeiger überhaupt irgendwo initialisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697031</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 17 Apr 2009 07:16:01 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Fri, 17 Apr 2009 07:54:55 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Wird der Frames-Zeiger überhaupt irgendwo initialisiert?</p>
</blockquote>
<p>Ja er wird außerhalb des angegebenen Codes initialisiert. Der Debugger zeigt mir auch zum Zeitpunkt des Fehlers an, das Frames auf ein gültiges Objekt zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697057</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Fri, 17 Apr 2009 07:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Fri, 17 Apr 2009 09:03:27 GMT]]></title><description><![CDATA[<p>Du musst die Prüfung auf End und das Zurücksetzen durchführen, bevor du den Iterator verwendest. Der End-Iterator zeigt eins hinter das letzte Element, und darf nicht mehr dereferenziert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697097</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 17 Apr 2009 09:03:27 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Fri, 17 Apr 2009 11:46:59 GMT]]></title><description><![CDATA[<p>Mit <code>while(true)</code> hast du aber nach wie vor eine Endlosschleife. Da dort nirgends ein <code>break</code> , <code>return</code> , <code>throw</code> oder <code>goto</code> vorkommt, verlässt du die Schleife nie (ich nehme nicht an, dass du sie über eine Exception der aufgerufenen Funktionen verlässt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697190</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Apr 2009 11:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Fri, 17 Apr 2009 12:57:45 GMT]]></title><description><![CDATA[<p>Vermutlich wird in der Funktion GetBegin() der Iterator einer Kopie der Liste zurückgegeben, die es nach GetBegin nicht mehr gibt. Ursache dafür ist häufig, dass in GetBegin() etwas wie &quot;return GetListe().begin()&quot; steht, wobei GetListe() selbst widerum keine std::list&lt;&gt;<strong>&amp;</strong>, sondern eine std::list&lt;&gt; by-value zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697247</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 17 Apr 2009 12:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Sat, 18 Apr 2009 05:21:29 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Vermutlich wird in der Funktion GetBegin() der Iterator einer Kopie der Liste zurückgegeben, die es nach GetBegin nicht mehr gibt.</p>
</blockquote>
<p>Da brauchst du nichts zu vermuten, die Implementierung von GetBegin() steht doch da. Wäre mir neu, dass std::vector::operator[] eine Kopie zurückgibt <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>Die Schleife ist schlicht und einfach falsch aufgebaut. SetImage wird mit dem dereferenzierten End-Iterator aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697605</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sat, 18 Apr 2009 05:21:29 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler: list iterator not dereferencable on Sat, 18 Apr 2009 06:05:38 GMT]]></title><description><![CDATA[<p>Installier mal Windows neu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697606</guid><dc:creator><![CDATA[brohyüdüb]]></dc:creator><pubDate>Sat, 18 Apr 2009 06:05:38 GMT</pubDate></item></channel></rss>