<?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[Zeiger zurückgeben]]></title><description><![CDATA[<p>Hi,</p>
<p>folgender Code:</p>
<pre><code class="language-cpp">void myAlloc( void* myPtr, int size )
{
    myPtr = new char[ size ];
    return( myPtr );
}
</code></pre>
<p>Dies führt zu ungewolltem Verhalten.<br />
Wenn ich hingegen<br />
[</p>
<pre><code class="language-cpp">void myAlloc( void** myPtr, int size )
{
    *myPtr = new char[ size ];
    return( *myPtr );
}
</code></pre>
<p>mache funktioniert es einwandfrei.<br />
Warum ist das so?<br />
Dynamischer Speicher ist doch nicht an eine Variable gebunden.<br />
Und am Ende der Funktion kann er ja auch nicht wieder vom Programm freigegeben werden, da dies die Aufgabe eines CabbageCollectors wäre und C++ ja bekantlich keinen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178979/zeiger-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 01:45:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178979.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Apr 2007 11:03:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger zurückgeben on Tue, 17 Apr 2007 11:03:41 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgender Code:</p>
<pre><code class="language-cpp">void myAlloc( void* myPtr, int size )
{
    myPtr = new char[ size ];
    return( myPtr );
}
</code></pre>
<p>Dies führt zu ungewolltem Verhalten.<br />
Wenn ich hingegen<br />
[</p>
<pre><code class="language-cpp">void myAlloc( void** myPtr, int size )
{
    *myPtr = new char[ size ];
    return( *myPtr );
}
</code></pre>
<p>mache funktioniert es einwandfrei.<br />
Warum ist das so?<br />
Dynamischer Speicher ist doch nicht an eine Variable gebunden.<br />
Und am Ende der Funktion kann er ja auch nicht wieder vom Programm freigegeben werden, da dies die Aufgabe eines CabbageCollectors wäre und C++ ja bekantlich keinen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267649</guid><dc:creator><![CDATA[Erika2]]></dc:creator><pubDate>Tue, 17 Apr 2007 11:03:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger zurückgeben on Tue, 17 Apr 2007 11:06:20 GMT]]></title><description><![CDATA[<p>Du machst ein return, obwohl Du void als Rückgabetypen definiert hast...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267651</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Tue, 17 Apr 2007 11:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger zurückgeben on Tue, 17 Apr 2007 11:12:33 GMT]]></title><description><![CDATA[<p>Im ersten Beispiel ist myPtr eine lokale Variable, die nur mit dem Inhalt des Parameters vorinitialisiert wird. Was du dort machst, hat keine Auswirkung auf die übergebene Variable (und das führt zu einem Speicherleck, weil niemand den Block freigibt). Im zweiten Beispiel ist myPtr zwar auch lokal, aber enthält die Adresse der externen Variablen - das heißt *myPtr ist die Variable des Hauptprogramms und an diese weist du die angeforderte Adresse zu.</p>
<p>PS: daß eine void-Funktion nichts zurückgeben kann, hat Paddy ja schon erwähnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267659</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 17 Apr 2007 11:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger zurückgeben on Tue, 17 Apr 2007 18:49:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void *myAlloc(int size)
{
    return (new char[size]);
}
</code></pre>
<p>Sollte funken.<br />
wobei du selbst siehst das deine funktion sinnlos ist wozu eine funktion schreiben die new benutzt um das gleiche zu machen was mit new geht oO</p>
<p>mfg tobZel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1267946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267946</guid><dc:creator><![CDATA[tobZel]]></dc:creator><pubDate>Tue, 17 Apr 2007 18:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger zurückgeben on Tue, 17 Apr 2007 19:07:45 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Im ersten Beispiel ist myPtr eine lokale Variable, die nur mit dem Inhalt des Parameters vorinitialisiert wird. Was du dort machst, hat keine Auswirkung auf die übergebene Variable (und das führt zu einem Speicherleck, weil niemand den Block freigibt).</p>
</blockquote>
<p>nö, das geht so, wie es da steht<br />
die funktion muss nur so definiert werden, dass sie den void* auch zurückgibt (wie Paddy82 geschrieben hat).<br />
<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/1267960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1267960</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Tue, 17 Apr 2007 19:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger zurückgeben on Wed, 18 Apr 2007 06:13:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15258">@vista</a>: Aber dann ist es auf jeden Fall sinnlos, dort schon einen 'void*' mitzugeben <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="😉"
    /> (die Funktion nutzt weder den übergebenen Wert noch kann sie über diesen Parameter die neue Adresse zurückgeben - und ich tippe jetzt blind darauf, daß Erika die Funktion in der Form <code>void* data;myAlloc(data,size);</code> verwenden wollte und sich über Zugriffsfehler gewundert hat)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268100</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 18 Apr 2007 06:13:51 GMT</pubDate></item></channel></rss>