<?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[Array sauber zurück geben?]]></title><description><![CDATA[<p>Hallo, wie gebe ich sauber ein Array zurück bei folgendem Code ist nur der erste Wert korrekt. Ich bekomme auch immer folgende warnmeldung.</p>
<p>warning C4172: returning address of local variable or temporary</p>
<p>Das ganze soll ja schon elegant Programmiert werden, deshalb möchte ich hier keine globale Variable Verwenden ist ja unschön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">long*  gibwaszurueck()
{
    long  rueckgabe[3];
    ... Mache was
    rueckgabe[0] = x
    rueckgabe[1] = y;  
    rueckgabe[2] = z; //xyz beliebige werte im longbereich

//Testhalber hier nochmal ausgegeben alles richtig
}

void main()
{
   long* l= gibwaszurueck();
   printf(&quot;TEST1 %i&quot;,  l[0]); //--&gt; Wird richtig angezeigt
   printf(&quot;\nTEST2 %i&quot;,l[1]);
   printf(&quot;\nTEST2 %i&quot;,l[2]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/175327/array-sauber-zurück-geben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 03:06:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175327.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Mar 2007 09:34:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array sauber zurück geben? on Fri, 09 Mar 2007 09:35:37 GMT]]></title><description><![CDATA[<p>Hallo, wie gebe ich sauber ein Array zurück bei folgendem Code ist nur der erste Wert korrekt. Ich bekomme auch immer folgende warnmeldung.</p>
<p>warning C4172: returning address of local variable or temporary</p>
<p>Das ganze soll ja schon elegant Programmiert werden, deshalb möchte ich hier keine globale Variable Verwenden ist ja unschön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">long*  gibwaszurueck()
{
    long  rueckgabe[3];
    ... Mache was
    rueckgabe[0] = x
    rueckgabe[1] = y;  
    rueckgabe[2] = z; //xyz beliebige werte im longbereich

//Testhalber hier nochmal ausgegeben alles richtig
}

void main()
{
   long* l= gibwaszurueck();
   printf(&quot;TEST1 %i&quot;,  l[0]); //--&gt; Wird richtig angezeigt
   printf(&quot;\nTEST2 %i&quot;,l[1]);
   printf(&quot;\nTEST2 %i&quot;,l[2]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1242147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242147</guid><dc:creator><![CDATA[Tobias1984]]></dc:creator><pubDate>Fri, 09 Mar 2007 09:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to Array sauber zurück geben? on Fri, 09 Mar 2007 09:36:57 GMT]]></title><description><![CDATA[<p>Das Array wird am Ende der Funktion wieder zerstört und damit zeigt der zurückgegebene Zeiger auf &quot;Müll&quot;. Lösungen gibt es mehrere:</p>
<ul>
<li>statisches Array (wird jedoch beim nächsten Aufruf dieser Funktion überschrieben)</li>
<li>Speicher per new[] anfordern (muß vom Aufrufer freigegeben werden)</li>
<li>verwende einen vector&lt;&gt;</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1242149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242149</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Mar 2007 09:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to Array sauber zurück geben? on Fri, 09 Mar 2007 09:45:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du darfst generell keine Pointer/Referenzen auf lokale Instanzen zurückreben. Das heißt du must in de Funktion generell dynamisch ein Heap-Array ertsellen</p>
<pre><code class="language-cpp">long*  gibwaszurueck()
{
    long*  rueckgabe = new long[3];
    // ...
    rueckgabe[0] = x
    rueckgabe[1] = y;  
    rueckgabe[2] = z; 
    return rueckgabe;
}

int main() // kein void!
{
   long* l= gibwaszurueck();
   printf(&quot;TEST1 %i&quot;,  l[0]);
   printf(&quot;\nTEST2 %i&quot;,l[1]);
   printf(&quot;\nTEST2 %i&quot;,l[2]);
   delete[] l; // Hier wieder löschen!
}
</code></pre>
<p>Das ist natürlich nicht elegant und sicher, deshalb sollte man lieber die richtigen C++Möglichkeiten ausnutzen und STL-Container benutzen</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

std::vector&lt;long&gt;  gibwaszurueck()
{
    std::vector&lt;long&gt; rueckgabe;
    rueckgabe.push_back(x);
    rueckgabe.push_back(y);  
    rueckgabe.push_back(z);
    return rueckgabe;
}  

int main()
{
   std::vector&lt;long&gt; l= gibwaszurueck();
   for (std::size_t lv = 0; lv &lt; l.size(); ++lv)
     std::cout &lt;&lt; l[lv] &lt;&lt; std::endl;
}
</code></pre>
<p>/Edit : zu langsam... aber ausführlicher <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>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242152</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 09 Mar 2007 09:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Array sauber zurück geben? on Fri, 09 Mar 2007 09:58:45 GMT]]></title><description><![CDATA[<p>Schick <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="🙂"
    /> habs auch gleich so übernommen <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="😃"
    /> Aber wie würde es mit nem Statischen Array aussehen?</p>
<p>eine anmerkung size_t ist kein Member of std sagt mir der Compiler, habs dann einfach mal entfernt das std. Achso generell ist es denn wichtig bei sowas wie dem Datentyp Vektor std davor zuschreiben?</p>
<p>Danke allen die mir geholfen haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242160</guid><dc:creator><![CDATA[Tobias1984]]></dc:creator><pubDate>Fri, 09 Mar 2007 09:58:45 GMT</pubDate></item><item><title><![CDATA[Reply to Array sauber zurück geben? on Fri, 09 Mar 2007 10:03:20 GMT]]></title><description><![CDATA[<p>Tobias1984 schrieb:</p>
<blockquote>
<p>Schick <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="🙂"
    /> habs auch gleich so übernommen <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="😃"
    /> Aber wie würde es mit nem Statischen Array aussehen?</p>
</blockquote>
<p>So wie bei deinem obigen Ansatz, nur mit <code>static long rueckgabe[3];</code> am Anfang.<br />
(das Hauptproblem bei dem Ansatz ist, daß du das Array nur einmal hast und bei jedem Aufruf neu füllst:</p>
<pre><code class="language-cpp">long* l1=gibwaszurueck();
cout&lt;&lt;l1[0]&lt;&lt;endl;
long* l2=gibwaszurueck();
cout&lt;&lt;l1[0]&lt;&lt;' '&lt;&lt;l2[0]&lt;&lt;endl;
</code></pre>
<blockquote>
<p>eine anmerkung size_t ist kein Member of std sagt mir der Compiler, habs dann einfach mal entfernt das std. Achso generell ist es denn wichtig bei sowas wie dem Datentyp Vektor std davor zuschreiben?</p>
</blockquote>
<p>Ja, alle Bestandteile der Standardbibliothek sind im Namensraum &quot;std&quot; untergebracht. Wenn du sie nicht per 'using' in den globalen Namensraum importierst, ist das std:: also Pflicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242165</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Mar 2007 10:03:20 GMT</pubDate></item><item><title><![CDATA[Reply to Array sauber zurück geben? on Fri, 09 Mar 2007 10:09:00 GMT]]></title><description><![CDATA[<p>Achso, gut mach ich eigentlich immer. Mit dem</p>
<pre><code class="language-cpp">using namespace std;
</code></pre>
<p>Das mit dem Vektor ist natürlich die schönste Variante, naja ist schon eine Weile her mit c++ in letzter Zeit hab ich immer in java Programmiert da denkt man halt nicht an solche Konstrukte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> in C++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242168</guid><dc:creator><![CDATA[Tobias1984]]></dc:creator><pubDate>Fri, 09 Mar 2007 10:09:00 GMT</pubDate></item></channel></rss>