<?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[Vereinigung von Listen]]></title><description><![CDATA[<p>Hallo, ich habe folgendes Programm geschrieben. In einer Methode sollen 2 listen vereinigt werden. Dies klappt auch wunderbar, jedoch stürzt das Programm bei der ausgabe der liste ab - woran kann das liegen?</p>
<p>dekl</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &lt;conio&gt;

class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();              //Konstruktor
        Kset(Kset &amp;obj);     //Kopierkonstruktor
        Kset(const int *obj, const int Array); //Kopierkonstruktor feld in int;
        Kset verein(const Kset &amp; s);
        ~Kset();             //Dekonstruktor

        void insert_front(int obj);
        void view_all();

        friend ostream &amp; operator &lt;&lt; (ostream&amp; os, Kset &amp; kl);
        friend Kset &amp; operator + (Kset&amp; x, Kset&amp; y);

};
</code></pre>
<p>impl</p>
<pre><code class="language-csharp">#include &quot;dekl0.h&quot;

//Konstruktor///////////////////////////////////////////////////////////////////

Kset::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
}

//Dekonstruktor/////////////////////////////////////////////////////////////////

Kset::~Kset()
{
 pFirst = NULL;
 pLast = NULL;
}

//Kopierkonstruktor/////////////////////////////////////////////////////////////

Kset::Kset(Kset &amp;obj)
{
 if(this != &amp;obj)
 {
  pFirst = NULL;
  pLast = NULL;
  Knoten *pTemp = obj.pFirst;
  while(pTemp != NULL)
   {
   insert_front(pTemp-&gt;Inhalt);
   pTemp = pTemp-&gt;pNext;
   }
  }
}

//Kopierkonstruktor für Feld in statische Groeße////////////////////////////////

Kset::Kset(const int *obj, const int Array)
{
 this-&gt;Anzahl = 0;
 this-&gt;pFirst = NULL;

 this-&gt;push_array(obj, Array);
}

//Vereinigung zweier Mengen/////////////////////////////////////////////////////

Kset Kset::verein(const Kset &amp; s)
{
 Kset tmp(*this);
 for(Knoten *ptemp=s.pFirst; ptemp !=NULL;  ptemp = ptemp-&gt;pNext)
  tmp.insert_front(ptemp-&gt;Inhalt);
  return tmp;
}

/////////////////////Methoden///////////////////////////////////////////////////

//vorne einfügen////////////////////////////////////////////////////////////////

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

//alles Anzeigen////////////////////////////////////////////////////////////////

void  Kset::view_all()
{
 Knoten *pTemp = pFirst;
 for(int anz=Anzahl; anz&gt;0;anz--)
 {
  cout&lt;&lt;pTemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  pTemp = pTemp-&gt;pNext;
 }
}
</code></pre>
<p>main</p>
<pre><code class="language-csharp">#include &quot;dekl0.h&quot;

#pragma hdrstop
#pragma argsused

int main(int argc, char* argv[])
{
      Kset k;

//vorne einfügen
      k.insert_front(1);
      k.insert_front(2);
      k.insert_front(3);
      k.insert_front(4);
//Vereinigung von Listen////////////////////////////////////////////////////////
      Kset M1;
      M1.insert_front(3);
      M1.view_all();

      Kset M2;
      M2.insert_front(99);
      M2.view_all();

      Kset M3;
      M3 = M1.verein(M2);
      cout&lt;&lt;M3;
      getch();
      return 0;
}
</code></pre>
<p>thx im voraus <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/topic/139756/vereinigung-von-listen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 18:25:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139756.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Mar 2006 00:04:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 00:04:38 GMT]]></title><description><![CDATA[<p>Hallo, ich habe folgendes Programm geschrieben. In einer Methode sollen 2 listen vereinigt werden. Dies klappt auch wunderbar, jedoch stürzt das Programm bei der ausgabe der liste ab - woran kann das liegen?</p>
<p>dekl</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &lt;conio&gt;

class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();              //Konstruktor
        Kset(Kset &amp;obj);     //Kopierkonstruktor
        Kset(const int *obj, const int Array); //Kopierkonstruktor feld in int;
        Kset verein(const Kset &amp; s);
        ~Kset();             //Dekonstruktor

        void insert_front(int obj);
        void view_all();

        friend ostream &amp; operator &lt;&lt; (ostream&amp; os, Kset &amp; kl);
        friend Kset &amp; operator + (Kset&amp; x, Kset&amp; y);

};
</code></pre>
<p>impl</p>
<pre><code class="language-csharp">#include &quot;dekl0.h&quot;

//Konstruktor///////////////////////////////////////////////////////////////////

Kset::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
}

//Dekonstruktor/////////////////////////////////////////////////////////////////

Kset::~Kset()
{
 pFirst = NULL;
 pLast = NULL;
}

//Kopierkonstruktor/////////////////////////////////////////////////////////////

Kset::Kset(Kset &amp;obj)
{
 if(this != &amp;obj)
 {
  pFirst = NULL;
  pLast = NULL;
  Knoten *pTemp = obj.pFirst;
  while(pTemp != NULL)
   {
   insert_front(pTemp-&gt;Inhalt);
   pTemp = pTemp-&gt;pNext;
   }
  }
}

//Kopierkonstruktor für Feld in statische Groeße////////////////////////////////

Kset::Kset(const int *obj, const int Array)
{
 this-&gt;Anzahl = 0;
 this-&gt;pFirst = NULL;

 this-&gt;push_array(obj, Array);
}

//Vereinigung zweier Mengen/////////////////////////////////////////////////////

Kset Kset::verein(const Kset &amp; s)
{
 Kset tmp(*this);
 for(Knoten *ptemp=s.pFirst; ptemp !=NULL;  ptemp = ptemp-&gt;pNext)
  tmp.insert_front(ptemp-&gt;Inhalt);
  return tmp;
}

/////////////////////Methoden///////////////////////////////////////////////////

//vorne einfügen////////////////////////////////////////////////////////////////

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

//alles Anzeigen////////////////////////////////////////////////////////////////

void  Kset::view_all()
{
 Knoten *pTemp = pFirst;
 for(int anz=Anzahl; anz&gt;0;anz--)
 {
  cout&lt;&lt;pTemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  pTemp = pTemp-&gt;pNext;
 }
}
</code></pre>
<p>main</p>
<pre><code class="language-csharp">#include &quot;dekl0.h&quot;

#pragma hdrstop
#pragma argsused

int main(int argc, char* argv[])
{
      Kset k;

//vorne einfügen
      k.insert_front(1);
      k.insert_front(2);
      k.insert_front(3);
      k.insert_front(4);
//Vereinigung von Listen////////////////////////////////////////////////////////
      Kset M1;
      M1.insert_front(3);
      M1.view_all();

      Kset M2;
      M2.insert_front(99);
      M2.view_all();

      Kset M3;
      M3 = M1.verein(M2);
      cout&lt;&lt;M3;
      getch();
      return 0;
}
</code></pre>
<p>thx im voraus <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/1012122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012122</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Thu, 09 Mar 2006 00:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 00:19:15 GMT]]></title><description><![CDATA[<p>Sorry, bisserl viel code zum mal-schnell-durchgucken.<br />
Höchstwahrscheinlich ists ein segfault. Schon mal im debugger geguckt?<br />
Ein &quot;where&quot; bzw. ein &quot;backtrace&quot; im gdb offenbaren solche fehler sehr schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012123</guid><dc:creator><![CDATA[Sepp Brannigan]]></dc:creator><pubDate>Thu, 09 Mar 2006 00:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 00:51:41 GMT]]></title><description><![CDATA[<p>hab mir den Code nochmal angeguckt. Was du da in der Methode verein() machst ist eine lokale(!) Instanz und von der gibst du nur eine flache Kopie zurück, da du keinen Zuweisungsoperator überladen hast [Kset &amp;operator=(const Kset &amp;)].<br />
Der Rest deiner Instanz wird durch deinen Destructor beim Verlassen der Methode zerblasen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012128</guid><dc:creator><![CDATA[Sepp Brannigan]]></dc:creator><pubDate>Thu, 09 Mar 2006 00:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 01:09:24 GMT]]></title><description><![CDATA[<p>Sepp Brannigan schrieb:</p>
<blockquote>
<p>hab mir den Code nochmal angeguckt. Was du da in der Methode verein() machst ist eine lokale(!) Instanz und von der gibst du nur eine flache Kopie zurück, da du keinen Zuweisungsoperator überladen hast [Kset &amp;operator=(const Kset &amp;)].<br />
Der Rest deiner Instanz wird durch deinen Destructor beim Verlassen der Methode zerblasen ...</p>
</blockquote>
<p>an dem code ist eine menge falsch - diese begründung hier allerdings ebenfalls zu 100%.</p>
<p>- zunächsteinmal ist diese liste ein speicherfass ohne boden - denn knoten werden nie freigegeben (folglich besteht obiges problem bzgl. des destruktors nicht wirklich).<br />
- der copy-konstruktor sollte eine referenz auf const anstatt einer referenz auf non-const nehmen.<br />
- im copy konstruktor wird das feld anzahl nicht kopiert (das verursacht vermutlich den absturz), nebenbei bemerkt ist ein solches feld für listen optional, es sollte eigentlich für keine der grundlegenden operationen benötigt werden. der test this!=&amp;s ist im copy-construktor sinnlos.<br />
- ein copy-assignment operator fehlt (wie erwähnt) und MUSS existieren wenn das destruktor problem gelöst wurde<br />
- der operator + (implementierung hier nicht gezeigt) hat den falschen return-typ (wenn wir mal davon ausgehen, dass es auf verein() basiert), und sollte ebenfalls referenzen auf const nehmen<br />
- view_all sollte const member sein</p>
<p>es sind sicher noch mehr probleme drin...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012130</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 09 Mar 2006 01:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 01:49:19 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>an dem code ist eine menge falsch - diese begründung hier allerdings ebenfalls zu 100%.</p>
</blockquote>
<p>stimm ich dir doch glatt zu: Hier ist ne Menge faul. Allerdings würd mich interessieren, was an meiner Begründung so 100%ig falsch sein soll?<br />
Nur mal angenommen, es gibt sonst keine Fehler allerdings auch keinen operator=() - was passiert deiner Meinung nach beim Verlassen der Methode?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012136</guid><dc:creator><![CDATA[Sepp Brannigan]]></dc:creator><pubDate>Thu, 09 Mar 2006 01:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 08:07:50 GMT]]></title><description><![CDATA[<p>Sepp Brannigan schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>an dem code ist eine menge falsch - diese begründung hier allerdings ebenfalls zu 100%.</p>
</blockquote>
<p>stimm ich dir doch glatt zu: Hier ist ne Menge faul. Allerdings würd mich interessieren, was an meiner Begründung so 100%ig falsch sein soll?<br />
Nur mal angenommen, es gibt sonst keine Fehler allerdings auch keinen operator=() - was passiert deiner Meinung nach beim Verlassen der Methode?</p>
</blockquote>
<p>op= wird in verein() nie aufgerufen (der copy-ctor dagegen wenigstens einmal). abgesehen davon, solange der destruktor eben nicht richtig funktioniert, spielt es schlicht keine rolle, ob ein selbstdefinierter operator vorhanden ist - der implizit benutzte op= könnte durchaus 'korrekt' funktionieren. insofern ist die begründung mittels op= falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012198</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 09 Mar 2006 08:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 08:58:56 GMT]]></title><description><![CDATA[<p>Hallo, Ich hab das ganze jetzt nochmal umgeschrieben:<br />
er läuft jetzt durch, zeigt aber die neue Liste, die die beiden anderen vereinigt falsch an:</p>
<p>dekl:</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &lt;conio&gt;

class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();
        Kset(const Kset &amp; obj);
        Kset verein(const Kset &amp; s);
        ~Kset();

        void insert_front(int obj);
        void view_all();
};
</code></pre>
<p>impl:</p>
<pre><code class="language-csharp">#include &quot;dekl11.h&quot;

Kset::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
}

Kset::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0; Anzahl--)
 {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  Anzahl--;
 }
}

Kset::Kset(const Kset &amp; obj)
{
 this-&gt;Anzahl = 0;
 pFirst = pLast = NULL;
 Knoten *ptemp = obj.pFirst;
 for(int anz = obj.Anzahl; anz != 0; anz--)
 {
  this-&gt;insert_front(ptemp-&gt;Inhalt);
  ptemp = ptemp-&gt;pNext;
 }
}

Kset Kset::verein(const Kset &amp; s)
{
 Kset tmp(*this);
 for(Knoten *ptemp=s.pFirst; ptemp !=NULL;  ptemp = ptemp-&gt;pNext)
  tmp.insert_front(ptemp-&gt;Inhalt);
  return tmp;
}

void Kset::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

void  Kset::view_all()
{
 Knoten *pTemp = pFirst;
 for(int anz=Anzahl; anz&gt;0;anz--)
 {
  cout&lt;&lt;pTemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  pTemp = pTemp-&gt;pNext;
 }
}
</code></pre>
<p>main:</p>
<pre><code class="language-csharp">#include &quot;dekl11.h&quot;

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        Kset k;
        k.insert_front(1);
        k.insert_front(2);
        k.insert_front(3);
        k.insert_front(4);
        k.view_all();

        cout&lt;&lt;endl&lt;&lt;endl&lt;&lt;endl;

        Kset k2(k);

        k2.insert_front(9);
        k2.insert_front(8);
        k2.view_all();

        cout&lt;&lt;endl&lt;&lt;endl;

        Kset k3;
        k3=k.verein(k2);
        k3.view_all();

        getch();
        return 0;
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1012234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012234</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Thu, 09 Mar 2006 08:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:09:07 GMT]]></title><description><![CDATA[<p>Mr. Blonde schrieb:</p>
<blockquote>
<p>Hallo, Ich hab das ganze jetzt nochmal umgeschrieben:<br />
er läuft jetzt durch, zeigt aber die neue Liste, die die beiden anderen vereinigt falsch an:</p>
</blockquote>
<p>Was genau meinst du mit &quot;zeigt falsch an&quot;? verein() nimmt die elemente von s und hängt sie jeweils VORNE an this an</p>
<pre><code>k:
4 3 2 1

k2:
8 9 4 3 2 1

-&gt; k3:
1 2 3 4 9 8 4 3 2 1
</code></pre>
<p>(das sollte nach meinem Verständnis rauskommen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012239</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:14:28 GMT]]></title><description><![CDATA[<p>Hi!</p>
<pre><code class="language-cpp">Anzahl--;
</code></pre>
<p>Mach das raus aus der Schleife im Destruktor.</p>
<p>Und gibt da:</p>
<pre><code class="language-cpp">Kset Kset::verein(const Kset &amp; s)
</code></pre>
<p>eine Referenz auf *this zurück, wobei du *this änderst und keine lokale Kopie erstellst.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012244</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:13:01 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Sepp Brannigan schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>an dem code ist eine menge falsch - diese begründung hier allerdings ebenfalls zu 100%.</p>
</blockquote>
<p>stimm ich dir doch glatt zu: Hier ist ne Menge faul. Allerdings würd mich interessieren, was an meiner Begründung so 100%ig falsch sein soll?<br />
Nur mal angenommen, es gibt sonst keine Fehler allerdings auch keinen operator=() - was passiert deiner Meinung nach beim Verlassen der Methode?</p>
</blockquote>
<p>op= wird in verein() nie aufgerufen (der copy-ctor dagegen wenigstens einmal). abgesehen davon, solange der destruktor eben nicht richtig funktioniert, spielt es schlicht keine rolle, ob ein selbstdefinierter operator vorhanden ist - der implizit benutzte op= könnte durchaus 'korrekt' funktionieren. insofern ist die begründung mittels op= falsch.</p>
</blockquote>
<p>Ich schrieb: beim Verlassen der Methode - also beim return (noch genauer: vor dem Lauf des Destructors) und da wird der operator=() wohl aufgerufen [M3 = M1.verein(M2);]. Daher spielt dieser durchaus eine Rolle - die, wenn nicht beachtet, _definitiv_ zu Problemen führt und zwar mit oder ohne funktionierendem Destructor. Ausserdem wage ich zu behaupten: &quot;... könnte der implizit benutzte op= durchaus 'korrekt' funktionieren&quot; ist hier wohl das, was sicherlich _nicht_ richtig ist - der implizite op=() erstellt dir eine flache kopie - was nicht ausreicht - soviel dürfte klar sein.</p>
<p>Darüberhinaus hab ich nie behauptet, alle Fehler zu listen. Die Frage war, &quot;woran kann das liegen?&quot; - und das ist IMHO eine der Möglichkeiten.<br />
Also nochmal: Wenn ich wirklich falsch liege, dann bitte gib mir ne plausible Erklärung (das eben war keine) - immerhin behauptest du hier, dass ich bullshit erzähle ...</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012245</guid><dc:creator><![CDATA[Sepp Brannigan]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:13:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:15:50 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Mr. Blonde schrieb:</p>
<blockquote>
<p>Hallo, Ich hab das ganze jetzt nochmal umgeschrieben:<br />
er läuft jetzt durch, zeigt aber die neue Liste, die die beiden anderen vereinigt falsch an:</p>
</blockquote>
<p>Was genau meinst du mit &quot;zeigt falsch an&quot;? verein() nimmt die elemente von s und hängt sie jeweils VORNE an this an</p>
<pre><code>k:
4 3 2 1

k2:
8 9 4 3 2 1

-&gt; k3:
1 2 3 4 9 8 4 3 2 1
</code></pre>
<p>(das sollte nach meinem Verständnis rauskommen)</p>
</blockquote>
<p>jup - sollte es ... aber es kommt eine komische zahlenfolge raus:</p>
<p>845641244 1 42257 1 42257 1 42257 1 42257 1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012248</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:15:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:30:38 GMT]]></title><description><![CDATA[<p>Dann dürfte wohl das Problem mit dem falschen Zuweisungsoperator dich gerade erschlagen haben <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="😉"
    /> - tmp ist eine lokale Variable in verein() und wird am Ende gelöscht - k3 bekommt eine flache Kopie davon (nur Anzahl und pFirst/pLast-Zeiger). Da tmp's Destruktor die Daten hinter pFirst/pLast vernichtet hat, rennst du im Endeffekt durch Speicherbereiche, in denen irgendwas stehen könnte (mit sehr viel Glück wurden die Datenbereiche deiner Liste &quot;nur&quot; als verwendbar markiert, aber wahrscheinlicher ist, daß schon jemand anderes sie in Beschlag genommen hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012264</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:33:32 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich sag ja, machs so:</p>
<pre><code class="language-cpp">List &amp;List::merge( const List &amp;other )
{
	Node *n = other.head;

	for ( ; n; n = n-&gt;next )
		push_back( n-&gt;value ); //*this wird geändert

	return *this; // Referenz auf this zurückgeben
}
</code></pre>
<p>Dann hast du das Problem nicht.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012268</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 09:37:36 GMT]]></title><description><![CDATA[<p>ahhh ... jetzt verstehe ich - thx!!! <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/1012276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012276</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Thu, 09 Mar 2006 09:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von Listen on Thu, 09 Mar 2006 14:03:07 GMT]]></title><description><![CDATA[<p>Sepp Brannigan schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Sepp Brannigan schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>an dem code ist eine menge falsch - diese begründung hier allerdings ebenfalls zu 100%.</p>
</blockquote>
<p>stimm ich dir doch glatt zu: Hier ist ne Menge faul. Allerdings würd mich interessieren, was an meiner Begründung so 100%ig falsch sein soll?<br />
Nur mal angenommen, es gibt sonst keine Fehler allerdings auch keinen operator=() - was passiert deiner Meinung nach beim Verlassen der Methode?</p>
</blockquote>
<p>op= wird in verein() nie aufgerufen (der copy-ctor dagegen wenigstens einmal). abgesehen davon, solange der destruktor eben nicht richtig funktioniert, spielt es schlicht keine rolle, ob ein selbstdefinierter operator vorhanden ist - der implizit benutzte op= könnte durchaus 'korrekt' funktionieren. insofern ist die begründung mittels op= falsch.</p>
</blockquote>
<p>Ich schrieb: beim Verlassen der Methode - also beim return (noch genauer: vor dem Lauf des Destructors) und da wird der operator=() wohl aufgerufen [M3 = M1.verein(M2);].</p>
</blockquote>
<p>oh ja, stimmt - da hab ich gar nicht hingeschaut. macht aber nichts - eine flache kopie reicht völlig aus, da die knoten liste selbst ja intakt bleibt (solange der destruktor nicht funktinierte - klar).</p>
<blockquote>
<p>Daher spielt dieser durchaus eine Rolle - die, wenn nicht beachtet, _definitiv_ zu Problemen führt und zwar mit oder ohne funktionierendem Destructor. Ausserdem wage ich zu behaupten: &quot;... könnte der implizit benutzte op= durchaus 'korrekt' funktionieren&quot; ist hier wohl das, was sicherlich _nicht_ richtig ist - der implizite op=() erstellt dir eine flache kopie - was nicht ausreicht - soviel dürfte klar sein.</p>
<p>Darüberhinaus hab ich nie behauptet, alle Fehler zu listen. Die Frage war, &quot;woran kann das liegen?&quot; - und das ist IMHO eine der Möglichkeiten.<br />
Also nochmal: Wenn ich wirklich falsch liege, dann bitte gib mir ne plausible Erklärung (das eben war keine) - immerhin behauptest du hier, dass ich bullshit erzähle ...</p>
<p>grüße</p>
</blockquote>
<p>wie gesagt, der implizite op= reicht<strong>e</strong> durchaus aus (er führt nur dazu, dass die kopie sich die knotenliste mit dem original teilt - und das führt möglicherweise zu problemen, sobald eine der listen verändert wird. dass der destruktor die anker pFirst,pLast löschte, spielt keine rolle. der wird schliesslich erst nach erstellen der kopie per copy-ctor bzw. copy-op ausgeführt (wir machen ja keine kopien von toten objekten). nat. brauchen wir einen eigenen op= wenn die liste jemals richtig funktionieren soll.<br />
abgesehen davon, spät in der nacht lässt die hirnaktivität nach - es war keineswegs ein angriff auf dich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012504</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 09 Mar 2006 14:03:07 GMT</pubDate></item></channel></rss>