<?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[Denkfehler bei Pointerübergabe]]></title><description><![CDATA[<p>Hallo ich habe folgende Funktion:</p>
<pre><code>Complex* Complex::addComplex(Complex* dest, const Complex* c1, const Complex* c2)
 {
  dest = new Complex(*c1);

  return dest;
 }
</code></pre>
<p>Wenn ich die so benutze, dann zeigt c nach dem Funktionsaufruf trotzdem auf NULL:</p>
<p>Wo ist hier mein Denkfehler?</p>
<pre><code>const Complex operator+(const Complex&amp; lhs, const Complex&amp; rhs)
	{
		Complex* c = NULL;
		Complex::addComplex(c, &amp;lhs, &amp;rhs);
		return (*c);
	}
</code></pre>
<p>Hier zeigt c dann auf die in der Funktion allozierte Speicheradresse:</p>
<pre><code>const Complex operator+(const Complex&amp; lhs, const Complex&amp; rhs)
	{
		Complex* c = NULL;
		c = Complex::addComplex(c, &amp;lhs, &amp;rhs);
		return (*c);
	}
</code></pre>
<p>Ich hoffe das war jetzt nicht zu prezise und kurz.</p>
<p>Vielen Dank für die kommende Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196439/denkfehler-bei-pointerübergabe</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 18:27:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196439.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Oct 2007 18:30:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 18:30:08 GMT]]></title><description><![CDATA[<p>Hallo ich habe folgende Funktion:</p>
<pre><code>Complex* Complex::addComplex(Complex* dest, const Complex* c1, const Complex* c2)
 {
  dest = new Complex(*c1);

  return dest;
 }
</code></pre>
<p>Wenn ich die so benutze, dann zeigt c nach dem Funktionsaufruf trotzdem auf NULL:</p>
<p>Wo ist hier mein Denkfehler?</p>
<pre><code>const Complex operator+(const Complex&amp; lhs, const Complex&amp; rhs)
	{
		Complex* c = NULL;
		Complex::addComplex(c, &amp;lhs, &amp;rhs);
		return (*c);
	}
</code></pre>
<p>Hier zeigt c dann auf die in der Funktion allozierte Speicheradresse:</p>
<pre><code>const Complex operator+(const Complex&amp; lhs, const Complex&amp; rhs)
	{
		Complex* c = NULL;
		c = Complex::addComplex(c, &amp;lhs, &amp;rhs);
		return (*c);
	}
</code></pre>
<p>Ich hoffe das war jetzt nicht zu prezise und kurz.</p>
<p>Vielen Dank für die kommende Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394301</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Mon, 29 Oct 2007 18:30:08 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 18:57:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Complex* Complex::addComplex(Complex*&amp; dest, Complex const&amp; c1, Complex const&amp;)
{
  dest = new Complex(c1);
  return dest;
}
</code></pre>
<pre><code class="language-cpp">const Complex operator+(const Complex&amp; lhs, const Complex&amp; rhs)
{
    Complex* c = NULL;
    return (*Complex::addComplex(c, lhs, rhs));
}
</code></pre>
<p>Oder wie hätten Sie es gerne? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Dein Problem ist einfach, das du einen Complex** übergeben müsstest, um den dann dereferenzieren zu können und dann einen Wert zuweisen zu können...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394310</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 29 Oct 2007 18:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 20:25:56 GMT]]></title><description><![CDATA[<p>Funktioniert! Super! Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394351</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Mon, 29 Oct 2007 20:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 20:30:27 GMT]]></title><description><![CDATA[<p>Aber wieso funktioniert airscape's Variante nicht???<br />
hat es damit zu tun, dass nur eine Kopie des Pointers erstellt wird, welche nach Beenden der Funktion verloren geht?? Daher die Referenz auf einen Complex-Pointer??</p>
<p>Danke im Voraus für die Antwort!</p>
<p>anchelito</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394352</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Mon, 29 Oct 2007 20:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 20:35:52 GMT]]></title><description><![CDATA[<p>Guck dir mal param-by-val an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394355</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 29 Oct 2007 20:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 21:19:07 GMT]]></title><description><![CDATA[<blockquote>
<p>param-by-val</p>
</blockquote>
<p>gibt es genau einmal bei google (o: Bald zweimal wenn Google den Thread hier gefunden hat.</p>
<p>Wenn ich</p>
<pre><code class="language-cpp">Complex*&amp; dest
</code></pre>
<p>in Worte ausdrücke heißt das ja</p>
<p>dest ist die Referenz auf eine Pointer-Adresse von Complex. Also quasi wie du schon sagtest, der Pointer auf einen Pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394372</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Mon, 29 Oct 2007 21:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Mon, 29 Oct 2007 21:25:21 GMT]]></title><description><![CDATA[<p>hier ist was ich gefunden habe ... schlussendlich gehts hier wohl wirklich um die Kopierkonstruktoren:</p>
<p><a href="http://cplus.kompf.de/tutor.html#i13480046" rel="nofollow">http://cplus.kompf.de/tutor.html#i13480046</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394376</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Mon, 29 Oct 2007 21:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Tue, 30 Oct 2007 06:48:50 GMT]]></title><description><![CDATA[<p>Wieso übergibst du überhaupt Pointer? Damit holst du dir nur ein Speicherleck, weil nach Ende der operator+ niemand mehr die Adresse des neu angelegten Complex-Objektes kennt.</p>
<pre><code class="language-cpp">Complex&amp; Complex::add(Complex&amp; dest,const Complex&amp; c1,const Complex&amp; c2)
{
  dest=c1;

  return dest;
}

Complex operator+(const Complex&amp; lhs,const Complex&amp; rhs)
{
  Complex c;
  Complex::add(c,lhs,rhs);
  return c;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1394453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394453</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 06:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Tue, 30 Oct 2007 07:13:04 GMT]]></title><description><![CDATA[<p>CStoll: Sollte operator+ nicht lieber ein <code>const</code> -Objekt zurückgeben? Und der Code von <code>add</code> erfüllt ja nun überhaupt keinen Sinn. <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394459</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 30 Oct 2007 07:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Tue, 30 Oct 2007 07:28:17 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>CStoll: Sollte operator+ nicht lieber ein <code>const</code> -Objekt zurückgeben?</p>
<blockquote>
<p>Stimmt, sollte er</p>
</blockquote>
<p>Und der Code von <code>add</code> erfüllt ja nun überhaupt keinen Sinn. <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="😉"
    /></p>
</blockquote>
<p>Hat der ursprüngliche Code auch nicht <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="😉"
    /> (abgesehen von &quot;Speicherlecks produzieren&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394464</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 07:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Tue, 30 Oct 2007 11:34:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Complex* Complex::addComplex(Complex*&amp; dest, Complex const&amp; c1, Complex const&amp; c2)
	{
		Matrix m = c2.getMatrixForAdd();
		Vector3D v = c1.getVector3D();
		Vector3D result = v * m;
		dest = new Complex(result.x, result.y);

		return dest;
	}
</code></pre>
<p>Das wäre der Code der dann Sinn macht. Grundsätzlich geht es in der Aufgabe um die Addition, Subtraktion, Multiplikation und Division von komplexen Zahlen.</p>
<p>Wieso habe ich überhaupt diese Variante probiert?</p>
<p>Also ich habe bei DirectX gesehen das es z.b. solche Funktionen gibt:</p>
<pre><code class="language-cpp">D3DXINLINE D3DXVECTOR3* D3DXVec3Maximize
    ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
</code></pre>
<p>Ich finde das Praktisch, da ich mich entscheiden kann ob ich den Rückgabetyp nehme oder mein Objekt im 1. Parameter verändern lasse. Beides hat so seine Vorteile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394612</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Tue, 30 Oct 2007 11:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Tue, 30 Oct 2007 11:38:57 GMT]]></title><description><![CDATA[<p>Ja, aber um analog zu dem Ansatz zu arbeiten, mußt du die Pointer dort als C-Version der Referenzen betrachten - da ist es nicht nötig, extra Speicher per new anzufordern (im Gegenteil: wenn du new verwendest, mußt du immer überlegen, wer für das dazugehörige delete verantwortlich sein soll).</p>
<p>PS: Für den Umgang mit komplexen Zahlen gibt es die Klasse std::complex&lt;&gt; <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394613</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 11:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to Denkfehler bei Pointerübergabe on Sat, 03 Nov 2007 23:36:14 GMT]]></title><description><![CDATA[<p>*hehe* das mit dem new hab ich auch dann beim schreiben entdeckt. Natürlich ist das totaler Unfug, vorallem da ich nicht mal auf NULL oder so wenigstens prüfe ^^</p>
<p>Joah das mit std::complex hab ich auch schon gesehen, aber ich denke da dies ja die eigentliche Aufgabe der Übung ist, kann ich die nicht benutzen. Naja meine implementierung ist zum Glück auch soweit fertig.</p>
<p>Danke für eure hilfe nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397283</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Sat, 03 Nov 2007 23:36:14 GMT</pubDate></item></channel></rss>