<?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 Elemente aus dynamischer Liste zu löschen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem.</p>
<p>Ich habe eine dynamische Liste. Aus dieser Liste möchte ich nun bestimmte Elemente löschen. Die Elemente der Liste sind Strukturen eines bestimmten typs. Da ist eine Variable &quot;selected&quot; drin. ICh möchte nun alle Listenelemente aus der Liste löschen, die in der Variable &quot;selected&quot; eine 0 drin stehen haben.<br />
Ich habe da jetzt mal was geschrieben, um die Elemente zu löschen, aber das funktioniert nicht. Wenn ich die Liste dann weiter benutzen will, kommt früher oder später im Programm ein Fehler, weil irgendein next-Zeiger der liste anscheinend sonswohin zeigt, nur nicht auf das nächste Listenelement.</p>
<p>wäre toll, wenn mal jemand über den code schauen und nachsehen könnte, was da falsch ist.<br />
vielen dank.</p>
<pre><code>// Die Liste der Individuen wird durchlaufen und es werden alle          
        // Individuen gelöscht,
	// die in ihrer Variable &quot;selected&quot; eine 0 drin stehen haben
	pointer_indiv= anfang_indiv;
	pointer_help_indiv= anfang_indiv-&gt;next;
	while(pointer_help_indiv != NULL)
	{
		if(anfang_indiv-&gt;selected == 0)
		{
            pointer_help_indiv= anfang_indiv-&gt;next;
			delete(anfang_indiv);
			anfang_indiv= pointer_help_indiv;
			pointer_indiv= anfang_indiv;
			pointer_help_indiv= anfang_indiv-&gt;next;
		}/* if(pointer_indiv-&gt;selected == 0) */
		else if(pointer_help_indiv-&gt;selected == 0)
		{
			pointer_help_indiv= pointer_help_indiv-&gt;next;
			delete(pointer_indiv-&gt;next);
			pointer_indiv-&gt;next= pointer_help_indiv;
			pointer_help_indiv= pointer_help_indiv-&gt;next;
		}
		else
		{
			pointer_indiv= pointer_indiv-&gt;next;
			pointer_help_indiv= pointer_help_indiv-&gt;next;
		}		
	}/* while(pointer_indiv != Null) */
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/133242/problem-elemente-aus-dynamischer-liste-zu-löschen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 19:47:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133242.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Jan 2006 12:59:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem Elemente aus dynamischer Liste zu löschen on Mon, 16 Jan 2006 12:59:50 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem.</p>
<p>Ich habe eine dynamische Liste. Aus dieser Liste möchte ich nun bestimmte Elemente löschen. Die Elemente der Liste sind Strukturen eines bestimmten typs. Da ist eine Variable &quot;selected&quot; drin. ICh möchte nun alle Listenelemente aus der Liste löschen, die in der Variable &quot;selected&quot; eine 0 drin stehen haben.<br />
Ich habe da jetzt mal was geschrieben, um die Elemente zu löschen, aber das funktioniert nicht. Wenn ich die Liste dann weiter benutzen will, kommt früher oder später im Programm ein Fehler, weil irgendein next-Zeiger der liste anscheinend sonswohin zeigt, nur nicht auf das nächste Listenelement.</p>
<p>wäre toll, wenn mal jemand über den code schauen und nachsehen könnte, was da falsch ist.<br />
vielen dank.</p>
<pre><code>// Die Liste der Individuen wird durchlaufen und es werden alle          
        // Individuen gelöscht,
	// die in ihrer Variable &quot;selected&quot; eine 0 drin stehen haben
	pointer_indiv= anfang_indiv;
	pointer_help_indiv= anfang_indiv-&gt;next;
	while(pointer_help_indiv != NULL)
	{
		if(anfang_indiv-&gt;selected == 0)
		{
            pointer_help_indiv= anfang_indiv-&gt;next;
			delete(anfang_indiv);
			anfang_indiv= pointer_help_indiv;
			pointer_indiv= anfang_indiv;
			pointer_help_indiv= anfang_indiv-&gt;next;
		}/* if(pointer_indiv-&gt;selected == 0) */
		else if(pointer_help_indiv-&gt;selected == 0)
		{
			pointer_help_indiv= pointer_help_indiv-&gt;next;
			delete(pointer_indiv-&gt;next);
			pointer_indiv-&gt;next= pointer_help_indiv;
			pointer_help_indiv= pointer_help_indiv-&gt;next;
		}
		else
		{
			pointer_indiv= pointer_indiv-&gt;next;
			pointer_help_indiv= pointer_help_indiv-&gt;next;
		}		
	}/* while(pointer_indiv != Null) */
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/967970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/967970</guid><dc:creator><![CDATA[Totto]]></dc:creator><pubDate>Mon, 16 Jan 2006 12:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem Elemente aus dynamischer Liste zu löschen on Mon, 16 Jan 2006 13:15:13 GMT]]></title><description><![CDATA[<p>Du solltest dir auch immer einen Pointer auf den Vorgänger mitziehen, da du dessen next-Zeiger beim Löschen umbiegen mußt:</p>
<pre><code class="language-cpp">if(pos-&gt;next-&gt;selected==0)
{
  help=pos-&gt;next;
  pos-&gt;next=help-&gt;next;//NV-Zeiger korrigieren
  delete help;
}
pos=pos-&gt;next;
</code></pre>
<p>(und vor allem solltest du erst deine Zeiger umbiegen und dann das Element löschen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/967986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/967986</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 16 Jan 2006 13:15:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem Elemente aus dynamischer Liste zu löschen on Mon, 16 Jan 2006 13:54:10 GMT]]></title><description><![CDATA[<p>So,</p>
<p>ich habe nochmal ein wenig dran rum gebastelt, aber das Programm bleibt immer noch stehen und zwar in der Zeile:</p>
<pre><code>else if(pointer_lauf_indiv-&gt;next-&gt;selected == 0)
</code></pre>
<p>Hier mal mein neuer code:</p>
<pre><code>// Zeiger zeigt auf ds erste Listenelment
	pointer_lauf_indiv= anfang_indiv;
	while(pointer_lauf_indiv != NULL)
	{
		if(anfang_indiv-&gt;selected == 0)
		{
            pointer_help_indiv= anfang_indiv-&gt;next;
			anfang_indiv= pointer_help_indiv;
			delete(pointer_lauf_indiv);
			pointer_lauf_indiv= pointer_help_indiv;
			pointer_help_indiv= anfang_indiv-&gt;next;

		}/* if(anfang_indiv-&gt;selected == 0) */
		else if(pointer_lauf_indiv-&gt;next-&gt;selected == 0)
		{
			pointer_help_indiv= pointer_lauf_indiv-&gt;next;
			pointer_lauf_indiv-&gt;next= pointer_help_indiv-&gt;next;
			delete(pointer_help_indiv-&gt;next);

		}
		else
		{
			pointer_help_indiv= pointer_help_indiv-&gt;next;
			pointer_lauf_indiv= pointer_lauf_indiv-&gt;next;
		}

	}/* while(pointer_lauf-indiv != Null) */
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/968029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968029</guid><dc:creator><![CDATA[Totto]]></dc:creator><pubDate>Mon, 16 Jan 2006 13:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem Elemente aus dynamischer Liste zu löschen on Mon, 16 Jan 2006 14:02:01 GMT]]></title><description><![CDATA[<p>visualisier dir das doch mal:</p>
<pre><code class="language-cpp">//lauf-&gt;D0|next-&gt;D1|next
help=lauf-&gt;next;
//lauf-&gt;D0|next-&gt;D1|next
//         help-^
lauf-&gt;next=help-&gt;next;
//        lauf-&gt;D1|next
//help-&gt;D0|next-^
delete help-&gt;next;
//        lauf-&gt;XXX
//help-&gt;D0|next-^
</code></pre>
<p>Da siehst du auch deinen Fehler: Du hast nicht das Feld gelöscht, mit dem du eigentlich arbeiten wolltest, sondern dessen Nachfolger in der Liste. Und beim nächsten Schleifendurchlauf versuchst du die Daten zu lesen, die gerade über den Jordan gegangen sind.<br />
Zur Lösung:</p>
<pre><code class="language-cpp">delete(pointer_help_indiv/*-&gt;next - überflüssig*/);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/968042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968042</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 16 Jan 2006 14:02:01 GMT</pubDate></item></channel></rss>