<?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[problem mit std::list]]></title><description><![CDATA[<p>ich dachte bisher, das list-iteratoren nur bei erase oder splice ungültig werden können, insbesondere dass end konstant wärend der ganzen lebenszeit einer liste ist. nachdem diese annahme allerdings zu einem crash-problem geführt hat, bin ich jetzt nicht mehr so sicher:</p>
<p>zumindest die dinkumware implementation von vc++7.1 invalidiert end wenn list::sort verwendet wird.</p>
<p>frage: ist das standardkonform oder (noch) ein fehler von vc?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126965/problem-mit-std-list</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 22:08:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126965.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Nov 2005 11:56:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit std::list on Sun, 20 Nov 2005 11:56:04 GMT]]></title><description><![CDATA[<p>ich dachte bisher, das list-iteratoren nur bei erase oder splice ungültig werden können, insbesondere dass end konstant wärend der ganzen lebenszeit einer liste ist. nachdem diese annahme allerdings zu einem crash-problem geführt hat, bin ich jetzt nicht mehr so sicher:</p>
<p>zumindest die dinkumware implementation von vc++7.1 invalidiert end wenn list::sort verwendet wird.</p>
<p>frage: ist das standardkonform oder (noch) ein fehler von vc?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922063</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 20 Nov 2005 11:56:04 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::list on Sun, 20 Nov 2005 18:14:31 GMT]]></title><description><![CDATA[<p>Ich würde nicht annhmen, dass jeder Iterator immer gültig ist. Selbst end() muss meiner Meinung nach nicht immer gültig sein.</p>
<p>std::list::sort() dagegen darf keinen Iterator invalidieren. Das wäre also ein Bug.</p>
<p>Hast du Beispielcode, der das Problem zeigt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922505</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Sun, 20 Nov 2005 18:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::list on Sun, 20 Nov 2005 18:38:59 GMT]]></title><description><![CDATA[<p>Der Standard sagt, dass erase, pop_back, pop_front und clear nur Iteratoren und Referenzen auf die gelöschten Elemente invalidieren (23.2.2.3-3) und splice in seiner 2 Parameter-Form alle Iteratoren der übergebenen Liste (23.2.2.4-4) und in seinen anderen beiden Formen nur Iteratoren der gesplicten Elemente.</p>
<p>Die Dinkumware-Impl. war zumindest beim 6er VC++ grausig. Vom 7er hatte ich das noch nicht gehört (muss aber nicht zwingend was heißen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922526</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Sun, 20 Nov 2005 18:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::list on Sun, 20 Nov 2005 19:32:01 GMT]]></title><description><![CDATA[<p>ein bisschen code zum demonstrieren:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;

using namespace std;

int main()
{
	std::list&lt; int &gt; l;
	typedef std::list&lt; int &gt;::iterator iterator;
	l.push_back( 10 );
	l.push_back( 1 );
	l.push_back( 3 );
	l.push_back( 7 );
	l.push_back( 5 );
	l.push_back( 0 );
	for ( iterator i = l.begin(); i != l.end(); ++i )
		std::cout &lt;&lt; *i &lt;&lt; '\t';
	iterator end1 = l.end();
	std::cout &lt;&lt; &quot;\nend = &quot; &lt;&lt; *(size_t*)&amp;end1 &lt;&lt; '\n';
	l.sort();
	for ( iterator i = l.begin(); i != l.end(); ++i )
		std::cout &lt;&lt; *i &lt;&lt; '\t';
	iterator end2 = l.end();
	std::cout &lt;&lt; &quot;\nend = &quot; &lt;&lt; *(size_t*)&amp;end2 &lt;&lt; '\n';
	std::cout &lt;&lt; ( end1 == end2 ) &lt;&lt; '\n';
	char x;
	std::cin &gt;&gt; x;
}
</code></pre>
<p>mit vc++2005 geht alles problemlos - die implementation ist identisch bis auf eine zeile - offenbar haben die programmierer den fehler dort auch gefunden.</p>
<p>naja, das wär dann noch so eine sache bei der man bei vc++7.1 aufpassen muss... aber das ist bei ms ja normal:<br />
der auto_ptr funktioniert im 8er vc immer noch nicht richtig :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922557</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 20 Nov 2005 19:32:01 GMT</pubDate></item></channel></rss>