<?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[Probleme mit Pointern]]></title><description><![CDATA[<p>Hi Leute.</p>
<p>Ich hab mal angefangen mir c++ als zusätzliche Sprache anzueignen.<br />
Dazu hatte ich jetzt ein kleines Programm mit einer Queue geschrieben. Dabei tauchen jedoch immer wieder Probleme mit den pointern auf.<br />
Und zwar hat jedes Element der Schlange einen Zeiger auf das mächste Element.<br />
Welches Codestück Probleme bereitet ist:</p>
<pre><code>node-&gt;insert(i);
node = &amp;node-&gt;getNext();
</code></pre>
<p>dem Element wird also etwas angefügt( d.h. ein neeuer Knoten erstellt.<br />
Und anschließend soll der Zeiger node ien Element weiter vorgerückt werden<br />
Und genau das ist der Punkt der nicht funktioniert.<br />
Kompilieren lässt sich das ganze und auch beim Ausführen tritt an sich kein Fehler auf, nur dass eben der Zeiger nicht richtig weiter gesetz wird.</p>
<p>Was mir beim Debuggen aufgefallen ist, ist die Tatsache, dass der nect-Zeiger eines Elementes, nach 2 Einfügeoperationen nicht mehr auf das richtige Objekt zeigt.</p>
<p>Ich bim im Moment nicht dazu in der Lage meinen Fehler zu finden, obwohl ich mir extra nochmal Sachen zu Pointern durchgelesen habe.</p>
<p>Ich wäre auch sehr dankbar, wenn sich das mal jemand anschauen könnte.</p>
<p>Gruß,</p>
<p>Martin.</p>
<pre><code>*********Klasse Queue***********

#include &lt;assert.h&gt;
#include &quot;Node.h&quot;
;

template&lt;class T&gt;
class Queue{
private:
	Node&lt;T&gt; *first,*last;
	int length;
public:
	Queue(){
		length = 0;
	}

	void insert(T v){
		if (length&gt;0){
			last-&gt;insert(v);
			last = &amp;(last-&gt;getNext());
		}else{
			first = new Node&lt;T&gt;(v);
			last = first;
		}
		length++;
	}

	T getFirst(){
		assert(length&gt;0);

		T tmp = first-&gt;getValue();
		Node&lt;T&gt; *tmp2 = first;
		first = &amp;(first-&gt;getNext());
		length--;
		delete tmp2;
		return tmp;
	}

	bool empty(){
		return (length==0);
	}

	int getLength(){
		return length;
	}
};

*********Klasse Node***********

#include &lt;assert.h&gt;

template&lt;class T&gt;
class Node{
private:
	T value;
	Node *next;
public:
	Node(T v){
		value = v;
	}

	void insert(T v){
		next = new Node(v);
	}

	T getValue(){
		return value;
	}

	Node getNext(){
		return *next;
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/192887/probleme-mit-pointern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 17:26:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192887.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Sep 2007 15:49:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Pointern on Wed, 19 Sep 2007 15:49:52 GMT]]></title><description><![CDATA[<p>Hi Leute.</p>
<p>Ich hab mal angefangen mir c++ als zusätzliche Sprache anzueignen.<br />
Dazu hatte ich jetzt ein kleines Programm mit einer Queue geschrieben. Dabei tauchen jedoch immer wieder Probleme mit den pointern auf.<br />
Und zwar hat jedes Element der Schlange einen Zeiger auf das mächste Element.<br />
Welches Codestück Probleme bereitet ist:</p>
<pre><code>node-&gt;insert(i);
node = &amp;node-&gt;getNext();
</code></pre>
<p>dem Element wird also etwas angefügt( d.h. ein neeuer Knoten erstellt.<br />
Und anschließend soll der Zeiger node ien Element weiter vorgerückt werden<br />
Und genau das ist der Punkt der nicht funktioniert.<br />
Kompilieren lässt sich das ganze und auch beim Ausführen tritt an sich kein Fehler auf, nur dass eben der Zeiger nicht richtig weiter gesetz wird.</p>
<p>Was mir beim Debuggen aufgefallen ist, ist die Tatsache, dass der nect-Zeiger eines Elementes, nach 2 Einfügeoperationen nicht mehr auf das richtige Objekt zeigt.</p>
<p>Ich bim im Moment nicht dazu in der Lage meinen Fehler zu finden, obwohl ich mir extra nochmal Sachen zu Pointern durchgelesen habe.</p>
<p>Ich wäre auch sehr dankbar, wenn sich das mal jemand anschauen könnte.</p>
<p>Gruß,</p>
<p>Martin.</p>
<pre><code>*********Klasse Queue***********

#include &lt;assert.h&gt;
#include &quot;Node.h&quot;
;

template&lt;class T&gt;
class Queue{
private:
	Node&lt;T&gt; *first,*last;
	int length;
public:
	Queue(){
		length = 0;
	}

	void insert(T v){
		if (length&gt;0){
			last-&gt;insert(v);
			last = &amp;(last-&gt;getNext());
		}else{
			first = new Node&lt;T&gt;(v);
			last = first;
		}
		length++;
	}

	T getFirst(){
		assert(length&gt;0);

		T tmp = first-&gt;getValue();
		Node&lt;T&gt; *tmp2 = first;
		first = &amp;(first-&gt;getNext());
		length--;
		delete tmp2;
		return tmp;
	}

	bool empty(){
		return (length==0);
	}

	int getLength(){
		return length;
	}
};

*********Klasse Node***********

#include &lt;assert.h&gt;

template&lt;class T&gt;
class Node{
private:
	T value;
	Node *next;
public:
	Node(T v){
		value = v;
	}

	void insert(T v){
		next = new Node(v);
	}

	T getValue(){
		return value;
	}

	Node getNext(){
		return *next;
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1368668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368668</guid><dc:creator><![CDATA[maddinac]]></dc:creator><pubDate>Wed, 19 Sep 2007 15:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Wed, 19 Sep 2007 17:06:46 GMT]]></title><description><![CDATA[<p>Hmm hab die Klasse nicht getestet aber denke mal so sollte es gehen:</p>
<pre><code class="language-cpp">#include &lt;cassert&gt;

template&lt;class T&gt;
class Queue
{
private:
	class Node
	{
	private:
		T		m_data;
		Node*	m_pNext;
	public:
		Node(T const&amp; data) : m_data(data), m_pNext(NULL) {}

	public:
		T const&amp; data() const { return m_data; }
		T&amp; data() { return m_data; }
		Node* next() const { return m_pNext; }

	} *m_pFirst, *m_pLast;
	std::size_t		m_size;
public:
	Queue() : m_size(0), m_pLast(NULL), m_pFirst(NULL) {}

    void push_back(T const&amp; data)
	{
		if (m_size &gt; 0)
		{
			Node* pNext = m_pLast-&gt;next();
			pNext = new Node(data);
			m_pLast = pNext;
		}
		else
		{
			m_pFirst = new Node(data);
			m_pLast = m_pFirst;
		}
        ++m_size;
    }

	T front()
	{ 
		if (length == 0) throw std::out_of_range(&quot;no node inserted&quot;);

		T tmp = m_pFirst-&gt;data();
		Node* ptr = m_pFirst-&gt;next();
		delete m_pFirst;
		m_pFirst = ptr;
		--m_size;
		return tmp;
	}

	T back()
	{
		Node* res = NULL;
		for (Node* ptr = m_pFirst; ptr-&gt;next(); ptr = ptr-&gt;next())
			res = ptr;
		T* last = ;

		T tmp = m_pLast-&gt;data();
		delete m_pLast;
		m_pLast = res;
		--m_size;

		return tmp;
	}

    bool empty() const{
        return (m_size == 0);
    }

	std::size_t size() const {	return m_size;	}
};
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368729</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 19 Sep 2007 17:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Wed, 19 Sep 2007 17:28:20 GMT]]></title><description><![CDATA[<p>danke, aber ich wollte eigentlich eher wissen, wo bei mir der fehler liegt.<br />
eine fertige klasse hätte ich auch so zur verfügung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368741</guid><dc:creator><![CDATA[maddinac]]></dc:creator><pubDate>Wed, 19 Sep 2007 17:28:20 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Wed, 19 Sep 2007 17:37:01 GMT]]></title><description><![CDATA[<p>warum dereferenzierst du bei next das node?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368750</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 19 Sep 2007 17:37:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Wed, 19 Sep 2007 19:13:37 GMT]]></title><description><![CDATA[<p>maddinac schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...	Node getNext(){
		return *next;
	}
}
</code></pre>
</blockquote>
<p>Hier gibst Du eine KOPIE des Node-Objekts zurück !<br />
Das dürfte etwas Anderes sein, als Du willst.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368800</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 19 Sep 2007 19:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Wed, 19 Sep 2007 19:22:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>: Siehe meinen Post (der letzte vor deinem <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="😉"
    /> ) hab mich nur vertan ... die Funktion heißt bei ihm getNext und nicht wie in der Umänderung von mir next ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368809</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 19 Sep 2007 19:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Thu, 20 Sep 2007 10:08:16 GMT]]></title><description><![CDATA[<p>Ja das dachte ich auch schon und hatte es auch mal geändet.<br />
Aber wenn ich dann den Code entspr. anpasse, zB. bei</p>
<pre><code>void insert(T v){
        if (length&gt;0){
            last-&gt;insert(v);
            [i]last = &amp;(last-&gt;getNext());[/i] [b]--&gt; last = last-&gt;getNext();[/b]
        }else{
            first = new Node&lt;T&gt;(v);
            last = first;
        }
        length++;
    }
</code></pre>
<p>bekomme ich an der geänderten Stelle eine Fehlermeldung, weil Node* nicht in Node konv. werden könne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369084</guid><dc:creator><![CDATA[maddinac]]></dc:creator><pubDate>Thu, 20 Sep 2007 10:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Thu, 20 Sep 2007 10:13:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Node* getNext(){ 
    return next; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1369090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369090</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 20 Sep 2007 10:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Thu, 20 Sep 2007 11:29:33 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>: Siehe meinen Post (der letzte vor deinem <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="😉"
    /> ) hab mich nur vertan ... die Funktion heißt bei ihm getNext und nicht wie in der Umänderung von mir next ...</p>
</blockquote>
<p>Deinen Hinweis hatte ich nicht in dieser Richtung verstanden (weil ich das Problem nicht in der Dereferenzierung, sondern in der Übergabe via Kopie einsortiert habe) ... und da ich nicht sicher bin, ob das dem OP nicht ebenso geht, ist mein Post vielleicht nicht komplett überflüssig. <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="😉"
    /><br />
(Sein letztes Posting bestärkt mich in dieser Annahme)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369174</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Thu, 20 Sep 2007 11:42:39 GMT]]></title><description><![CDATA[<p>Wunderbar, danke!<br />
das war der Fehler.</p>
<p>Sage ich jetzt dadurch, dass ich einen Pointer zurückgebe? weil ich ja die adresse returne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369192</guid><dc:creator><![CDATA[maddinac]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Thu, 20 Sep 2007 11:46:38 GMT]]></title><description><![CDATA[<p>maddinac schrieb:</p>
<blockquote>
<p>Wunderbar, danke!<br />
das war der Fehler.</p>
<p>Sage ich jetzt dadurch, dass ich einen Pointer zurückgebe? weil ich ja die adresse returne.</p>
</blockquote>
<p>Genau !</p>
<pre><code class="language-cpp">Node f( // gibt ein Objekt des Typs Node zurück
Node* f( // gibt einen Pointer auf ein Objekt des Typs Node zurück
</code></pre>
<p>... wie bei allen Anderen Typangaben auch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369200</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Pointern on Thu, 20 Sep 2007 11:47:42 GMT]]></title><description><![CDATA[<p>Keine Ursache:)</p>
<p>hä? nochmal klar in deutsch:)</p>
<p>Edit: OK:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369203</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 20 Sep 2007 11:47:42 GMT</pubDate></item></channel></rss>