<?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[Pointer erst in einer Funktion zum Leben erwecken?]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich denke was ich tun möchte wird direkt durch folgenden Code klar:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void CharTest(char *Pointer)
{
    Pointer = new char[3];
    Pointer[0] = 'H';
    Pointer[1] = 'i';
    Pointer[2] = '\0';
}

int main()
{
    char *Message;
    CharTest(Message); //Autsch -&gt; Unbehandelte Ausnahme -&gt; Zugriffsverletzung
    std::cout &lt;&lt; Message;
    delete[] Message;
    std::cin.get();
}
</code></pre>
<p>Das das so nicht funktioniert ist mir klar, sonst würde ich hier nicht schreiben.<br />
Mich interessiert, was geändert werden muss, damit mein Zeiger am Ende &quot;Hi&quot; enthält.</p>
<p>Ich freue mich über jede Hilfe.</p>
<p>lg Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/210150/pointer-erst-in-einer-funktion-zum-leben-erwecken</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 10:36:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210150.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Apr 2008 19:22:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Mon, 07 Apr 2008 19:22:30 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich denke was ich tun möchte wird direkt durch folgenden Code klar:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void CharTest(char *Pointer)
{
    Pointer = new char[3];
    Pointer[0] = 'H';
    Pointer[1] = 'i';
    Pointer[2] = '\0';
}

int main()
{
    char *Message;
    CharTest(Message); //Autsch -&gt; Unbehandelte Ausnahme -&gt; Zugriffsverletzung
    std::cout &lt;&lt; Message;
    delete[] Message;
    std::cin.get();
}
</code></pre>
<p>Das das so nicht funktioniert ist mir klar, sonst würde ich hier nicht schreiben.<br />
Mich interessiert, was geändert werden muss, damit mein Zeiger am Ende &quot;Hi&quot; enthält.</p>
<p>Ich freue mich über jede Hilfe.</p>
<p>lg Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488177</guid><dc:creator><![CDATA[MaDsTyLe]]></dc:creator><pubDate>Mon, 07 Apr 2008 19:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Mon, 07 Apr 2008 19:25:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt; 

void CharTest(char*&amp; Pointer) //&lt; hier
{ 
    Pointer = new char[3]; 
    Pointer[0] = 'H'; 
    Pointer[1] = 'i'; 
    Pointer[2] = '\0'; 
} 

int main() 
{ 
    char *Message; 
    CharTest(Message); //Autsch -&gt; Unbehandelte Ausnahme -&gt; Zugriffsverletzung 
    std::cout &lt;&lt; Message; 
    delete[] Message; 
    std::cin.get(); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1488180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488180</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Mon, 07 Apr 2008 19:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Mon, 07 Apr 2008 19:34:22 GMT]]></title><description><![CDATA[<p>Ey verflucht, ja man, danke! <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>
<p>Ich bitte aber um ne Erklärung des Vorgangs, wenns möglich ist...</p>
<p>lg Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488188</guid><dc:creator><![CDATA[MaDsTyLe]]></dc:creator><pubDate>Mon, 07 Apr 2008 19:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Mon, 07 Apr 2008 19:37:28 GMT]]></title><description><![CDATA[<p>Du hast den Pointer by-value übergeben.</p>
<p>new änder den Wert des Pointers selbst, die Änderung bekommt main() natürlich nicht mit.</p>
<p>Nach meiner Änderung wird nicht mehr der Pointer direkt übergeben sondern eine Referenz auf den Pointer. Ist ähnlich wie das konzept des Pointer selbst, die main() bekommt jetzt mit, dass new den Wert des Pointers geändert hat.</p>
<p>Zum Nachschlagen im Lehrbuch/Tutorial: operator new, referenz <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/1488192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488192</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Mon, 07 Apr 2008 19:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Mon, 07 Apr 2008 21:38:49 GMT]]></title><description><![CDATA[<p>Vielen herzlichen Dank!</p>
<p>lg Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488254</guid><dc:creator><![CDATA[MaDsTyLe]]></dc:creator><pubDate>Mon, 07 Apr 2008 21:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Tue, 08 Apr 2008 07:16:45 GMT]]></title><description><![CDATA[<blockquote>
<p>char*&amp; Pointer</p>
</blockquote>
<p>Wobei sich da einem schon die Zehennaegel aufrollen !<br />
Also beim lesen von sowas wird niemand gluecklich !</p>
<p>entweder man bleibt aus driftigen Gruenden beim C Interface und verzichtet auf die referenz zugunsten eines pointers of pointers ...<br />
char ** pPointer<br />
da fuehlen sich zumindest die C Veteranen wohl dabei <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>
<p>C++ benutzt eigentlich ganz andere Techniken ... da waer wohl eher<br />
std:string CharTest();<br />
oder<br />
void CharTest(std::string &amp; rValue);</p>
<p>die bessere Wahl.</p>
<p>Wenn man scho lernt, sollt man sich auch gleich bissi mit &quot;ordentlichen&quot; design auseinandersetzen <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>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488326</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 08 Apr 2008 07:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Tue, 08 Apr 2008 07:23:51 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>...entweder man bleibt aus driftigen Gruenden beim C Interface und verzichtet auf die referenz zugunsten eines pointers of pointers ...<br />
char ** pPointer<br />
da fuehlen sich zumindest die C Veteranen wohl dabei <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>
</blockquote>
<p>Auch wenn es unter C++ häufig bessere Möglichkeiten gibt, ist der Vorzug ** gegenüber *&amp; meines Erachtens schlecht. Mag sein das C-Veteranen mit Doppelzeigern besser klar kommen, aber auch wenn eine Zeigerreferenz ungewöhnlich aussieht muss man sich hierbei wenigstens nicht um mehrfache Indirektionen kümmern (was auch C++ Neulingen dann etwas zugute kommt, nicht jeder ist ein Veteran der ersten Stunde).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488331</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 08 Apr 2008 07:23:51 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Tue, 08 Apr 2008 09:37:09 GMT]]></title><description><![CDATA[<blockquote>
<p>was auch C++ Neulingen dann etwas zugute kommt, nicht jeder ist ein Veteran der ersten Stunde</p>
</blockquote>
<p>Grade bei Neulingen ....</p>
<p>rohe pointer sollten in c++ soweiso eher vermieden werden. ned immer moeglich klar.<br />
Aber wo muss ich den die referenz aufn pointer uebergeben ? ... eigentlich nur wenn ich object irgendwo erzeuge und das resultat zurueckgebe. Ausser in Objectfactories eher schlechtes design oder ?</p>
<p>Grad da sollte man Achtungszeichen setzen ... und den Neulingen grad das leicht zu machen, iss wohl eher der falsche weg.</p>
<blockquote>
<p>Auch wenn es unter C++ häufig bessere Möglichkeiten gibt, ist der Vorzug ** gegenüber *&amp; meines Erachtens schlecht</p>
</blockquote>
<p>doch grade deshalb. Weil man expliziet sich schon entscheiden sollt zwischen c++ und c ... und &quot;schlechtere&quot; &quot;Fehlerandfaelligere&quot; Möglichkeiten zu benutzen statt optimalere soll weh tun <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>
<p>Implementiert man obige funktion sauber, wird sich die referenz auf den Zeiger eh aufloesen. Wer in ernsthaften Projecten das da oben durchgehen laesst ... ich weiss ned.<br />
Weiss ned wie Du programmierst, aber referenz auf Zeiger kommt bei uns in reinem C++ fast gar ned vor.<br />
Vorkommen koennt es eher in zusammenarbeit mit C Api's .... und da gibt es bessere loesungen. Aber zumindest ein typedef auf den char * in so ner umgebung waer angebracht, womit das *&amp; verschwinden wuerd, und jeder der den code liest ahnen kann, das ich das da bewusst gemacht hab.</p>
<p>Das *&amp; sieht zum .... aus, und das ist auch gut so ... weil wenn man sowas liest, sollten schon irgendwelche Vorgaenge im Hinterkopf ausgeloest werden !</p>
<p>Ciao ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488390</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 08 Apr 2008 09:37:09 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Tue, 08 Apr 2008 09:48:43 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>Weiss ned wie Du programmierst, aber referenz auf Zeiger kommt bei uns in reinem C++ fast gar ned vor.</p>
</blockquote>
<p>Ich bin leider davon abhängig was mir geliefert wird, und das wir viele Altlasten im Programm haben (zudem sind die DLL-Schnittstellen komplett C). An diesen Stellen befinden sich noch so schöne Konstrukte wie Doppelzeiger, Dreifachzeiger oder ähnliches.</p>
<p>RHBaum schrieb:</p>
<blockquote>
<p>Aber zumindest ein typedef auf den char * in so ner umgebung waer angebracht, womit das *&amp; verschwinden wuerd, und jeder der den code liest ahnen kann, das ich das da bewusst gemacht hab.</p>
</blockquote>
<p>Das Typedef verbirgt aber in dem Fall ggf. einen Sachverhalt den du manchmal wissen musst...</p>
<p>RHBaum schrieb:</p>
<blockquote>
<p>Das *&amp; sieht zum .... aus,</p>
</blockquote>
<p>Nicht schlimmer als ein Doppelzeiger, und einfacher in der Anwendung.</p>
<p>Nochmal: Grundsätzlich sind Doppelzeiger und ähnliche Konstrukte meist ein Zeichen das es in C++ besser geht (in meinen privaten Code wüsste ich keine einzige Anwendung), nichst desto trotz sollte man hier jedoch entscheiden was für die Anwendung angenehmer ist. Du ziehst den Doppelzeiger, ich die Zeigerreferenz vor. Aber grundsätzlich *&amp; aus Ästhetischen Gründen für schlecht zu deklarieren finde ich unsinnig (Die Referenzsyntax erleichtert imho vieles).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488399</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 08 Apr 2008 09:48:43 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Tue, 08 Apr 2008 11:31:44 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>...<br />
Aber wo muss ich den die referenz aufn pointer uebergeben ? ... eigentlich nur wenn ich object irgendwo erzeuge und das resultat zurueckgebe. Ausser in Objectfactories eher schlechtes design oder ? ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Also für mich bedeutet &quot;&amp;&quot; (non-const) in einer Parameterleiste immer &quot;ist verpflichtender Output-Parameter&quot; ... und das unabhängig vom Typen. Denn</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
int f(T&amp; out);
</code></pre>
<p>soll ja auch für Zeiger/Iteratoren funktionieren ...</p>
<p>Also ich habe eine Menge Referenzen in meinem Code ... auch auf Zeiger.<br />
Zum Beispiel in Konstruktionen wie:</p>
<pre><code class="language-cpp">size_t find_elem_with_pos(int val, int const* &amp; elem) {
   elem = 0;
   size_t ret = 0;

   static int const values[] = { 0, 2, 15, 19 };
   static size_t const* const end = &amp;values[4];
   int const* pos = find(&amp;values[0], end, val);
   if(pos != end) { 
      elem = pos;
      ret = pos - &amp;values[0]/sizeof(int);
   }
   return ret;
}
</code></pre>
<p>Kann man bestimmt netter (exception safety, ...) schreiben, aber die Zeigerreferenz braucht man trotzdem.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488448</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 08 Apr 2008 11:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Tue, 08 Apr 2008 14:45:48 GMT]]></title><description><![CDATA[<blockquote>
<p>Nicht schlimmer als ein Doppelzeiger, und einfacher in der Anwendung.</p>
</blockquote>
<p>Ich finds schlimmer ...</p>
<blockquote>
<p>Das Typedef verbirgt aber in dem Fall ggf. einen Sachverhalt den du manchmal wissen musst</p>
</blockquote>
<p>wie du selbst sagst, bei reinem C++ isses eher schlechtes design. Bei verwendung von C-Apis manchmal notwendig. Aber genau da kann und sollt man doch typedeffen (oder templates halt), das die Typen handlicher werden ?</p>
<p>seh ich schon nen unterschied.</p>
<p>Unter C war nen Doppelzeiger meist immer ... ich konstruier(dynamisch) Dir was und gebs dir als Parameter zurueck. Selbst in C nicht immer die beste Wahl.<br />
Normal sollte man das in C++ nie machen. Selbst wenn man unter C++ mit ner C-Api zusammenerbeiten muss braucht man das nie selber.</p>
<p>Was aber oefters vorkommt, wie simon2 schreibt, ist das man nen von C geerbter Typ, der nen Zeiger ist, irgendwie gleich wie ne normale klasse/POD behandelt werden soll, weil er sich wie die klasse/POD verhaelt (oder andersrum, iteratoren sind nen beispiel).<br />
Aber grad da erhoeht nen typedef doch die leserlichkeit ungemein ....</p>
<p>Ich verwend auch (impliziet) Referenzen auf Zeiger ... aber zwischen<br />
foo(void * &amp; context)<br />
und<br />
typedef void * Handle; //(irgendwo zentral)<br />
foo(Handle &amp;)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a><br />
Dein beispiel liesst sich aber schon wie als haettest nen template aufgeloest <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="🙂"
    /><br />
Wenn man da keine typvarianz brauch, wuerde man das schon anders implementieren oder ?</p>
<p>Also ich hab seit ner genzen weile *&amp; nie mehr benutzt, doppelpointer eher sehr selten. Und ich hab ne menge mit C-API's zu tun und implementier teilweisse auch C Schnittstellen.</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488577</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 08 Apr 2008 14:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer erst in einer Funktion zum Leben erwecken? on Wed, 09 Apr 2008 08:10:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>mir geht's darum, dass Zeiger nicht nur für die dynamische Erzeugung gebraucht werden, sondern auch als &quot;optionale Verweise&quot; (deswegen hier die Erwähnung von &quot;Iteratoren&quot;) auf Bestehendes (also ohne &quot;Erzeugung&quot;) verwendet werden.<br />
Und in dieser Funktion sehe ich da nichts Ungewöhnliches, solche Parameter per Referenz zu übergeben (z.B. wenn man keinen Returncode verwenden will oder aufgrund der Semantik nicht kann).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488890</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 09 Apr 2008 08:10:24 GMT</pubDate></item></channel></rss>