<?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 bzw. pointer problem]]></title><description><![CDATA[<p>hi,</p>
<p>habe folgenden code, der auch funktioniert (im prinzip fast das gleiche, nur bei einem &amp;it bei dem anderen *it) und weiss nicht wieso es so sein muss. kann mir da jemand helfen oder mir zeigen wie es richtig gemacht werden muss?</p>
<pre><code>void GarbageCollector::removeObject(Object* o)
{
	std::cout &lt;&lt; &quot;GarbageCollector::removeObject(...)&quot; &lt;&lt; std::endl;

	for (std::vector&lt;Object*&gt;::iterator it = vecObjects.begin(); it != vecObjects.end();)
	{
		if (o == *it)
		{
			std::cout &lt;&lt; &quot;  deleting object (&quot; &lt;&lt; o-&gt;serialNumber() &lt;&lt; &quot; - &quot; &lt;&lt; o &lt;&lt; &quot;)&quot; &lt;&lt; std::endl;
			it = vecObjects.erase(it);
			delete &amp;it;
		}
		else
		{
			++it;
		}
	}
}

void GarbageCollector::removeAllObjects()
{
	std::cout &lt;&lt; &quot;GarbageCollector::removeAllObjects()&quot; &lt;&lt; std::endl;

	for (std::vector&lt;Object*&gt;::iterator it = vecObjects.begin(); it != vecObjects.end();)
	{
		std::cout &lt;&lt; &quot;  vecObjects.size(): &quot; &lt;&lt; vecObjects.size() &lt;&lt; std::endl;
		//vecObjects.erase(it);
		delete *it;
	}

	vecObjects.clear();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/211465/iterator-bzw-pointer-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 04:40:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211465.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Apr 2008 14:13:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator bzw. pointer problem on Wed, 23 Apr 2008 14:13:47 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>habe folgenden code, der auch funktioniert (im prinzip fast das gleiche, nur bei einem &amp;it bei dem anderen *it) und weiss nicht wieso es so sein muss. kann mir da jemand helfen oder mir zeigen wie es richtig gemacht werden muss?</p>
<pre><code>void GarbageCollector::removeObject(Object* o)
{
	std::cout &lt;&lt; &quot;GarbageCollector::removeObject(...)&quot; &lt;&lt; std::endl;

	for (std::vector&lt;Object*&gt;::iterator it = vecObjects.begin(); it != vecObjects.end();)
	{
		if (o == *it)
		{
			std::cout &lt;&lt; &quot;  deleting object (&quot; &lt;&lt; o-&gt;serialNumber() &lt;&lt; &quot; - &quot; &lt;&lt; o &lt;&lt; &quot;)&quot; &lt;&lt; std::endl;
			it = vecObjects.erase(it);
			delete &amp;it;
		}
		else
		{
			++it;
		}
	}
}

void GarbageCollector::removeAllObjects()
{
	std::cout &lt;&lt; &quot;GarbageCollector::removeAllObjects()&quot; &lt;&lt; std::endl;

	for (std::vector&lt;Object*&gt;::iterator it = vecObjects.begin(); it != vecObjects.end();)
	{
		std::cout &lt;&lt; &quot;  vecObjects.size(): &quot; &lt;&lt; vecObjects.size() &lt;&lt; std::endl;
		//vecObjects.erase(it);
		delete *it;
	}

	vecObjects.clear();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1496936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496936</guid><dc:creator><![CDATA[someJavaDude]]></dc:creator><pubDate>Wed, 23 Apr 2008 14:13:47 GMT</pubDate></item><item><title><![CDATA[Reply to iterator bzw. pointer problem on Wed, 23 Apr 2008 14:39:16 GMT]]></title><description><![CDATA[<p>es ist erstens schlecht, einen iterator zu verwenden, nachdem er nicht mehr gültig ist (untere schleife, deshalb hast du das erase wohl auch kommentiert) und das</p>
<pre><code class="language-cpp">it = vecObjects.erase(it);
delete &amp;it;
</code></pre>
<p>du entfernst zuerst das alte objekt aus der liste, der iterator zeigt dann auf das nächste. dann versuchst du die stelle im speicher zu löschen, an der it selbst liegt. my best guess: <code>delete o</code> .</p>
<p>wenn ich fragen darf: was macht deine klasse denn feines?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496959</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 23 Apr 2008 14:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to iterator bzw. pointer problem on Wed, 23 Apr 2008 14:50:44 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>mit delete o in removeObject(Object* o) klappts nicht. ich möchte ja eigentlich nur das object, dessen pointer im vector vecObjects steht, löschen und diesen eintrag aus dem vector entfernen.</p>
<p>zur klasse selber, ich bin z.z. eigentlich nur am c++ lernen etc (java beruflich und c++ privat nun) und wollte mir einen kleinen garbagecollector schreiben und vllt endlich mal ein spiel weiter schreiben (snes harvestmoon klon).. oder wenn ich lust hab nen service unter linux, der per snmp und xmlrpc sich daten von endgeräten aus meinem netzwerk holt, diese aufbereitet und grafisch anzeigt (rrdtool) bzw. hinterher soll das teil noch meine musik und filmsammlung managen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496964</guid><dc:creator><![CDATA[someJavaDude]]></dc:creator><pubDate>Wed, 23 Apr 2008 14:50:44 GMT</pubDate></item><item><title><![CDATA[Reply to iterator bzw. pointer problem on Wed, 23 Apr 2008 15:13:52 GMT]]></title><description><![CDATA[<p>was klappt nicht? fehlermeldung?</p>
<p>wenn das objekt in der liste ist und gefunden wird, führt <code>delete *it</code> genauso wie <code>delete o</code> zur löschung des objekts.</p>
<p>eventuell übergibst du der funktion einen zeiger, der gar nicht mehr gültig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496978</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 23 Apr 2008 15:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to iterator bzw. pointer problem on Wed, 23 Apr 2008 15:34:19 GMT]]></title><description><![CDATA[<p>ich glaub ich sollte nochmal nachschauen wie die iteratoren richtig funktionieren.</p>
<p>und gültig dürften die zeiger eigentlich immer sein, auch wenn ich ein Objekt delete, wird im destruktor die funktion removeObject(this) vom garbagecollector aufgerufen.</p>
<p>es hakt bestimmt nur daran wie ich den vector durchlaufe und die referenzierten objekte lösche</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496995</guid><dc:creator><![CDATA[someJavaDude]]></dc:creator><pubDate>Wed, 23 Apr 2008 15:34:19 GMT</pubDate></item></channel></rss>