<?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 out of Scope]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich hab eine Frage zu folgendem Problem. Ich möchte eine Funktion definieren, die einen Array mit Integern einmal füllt (ImageArray) und anschließend als Argument für eine weitere Funktion (ShowImage) verwendet, welche in einer while Schleife immer wieder abgerufen werden soll.</p>
<p>Ich wollte dazu einen Array (ImageArray) nutzen. Wenn ich diesen Array innerhalb der if Abfrage verwendet, werden die Werte vernünftig gefüllt, jedoch befindet sich der Array dann innerhalb der if Schleife und er wird als nicht definiert von der ShowImage Funktion angegeben, wenn ich den Array außerhalb der if Schleife habe, wird er zwar von der Funktion gefunden, aber die Werte werden nicht richtig übertragen .... <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>
<p>Hat jemand vielleicht eine einfache und effiziente Lösung zu dem Problem parat? Mag sein, dass es sich dabei um eine Anfängerfrage handelt, aber ich komm einfach nicht auf eine befriedigende Lösung! <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>Hier der Code:</p>
<p>Lösung 1</p>
<pre><code>static bool run_once = false;
unsigned int ImageArray[repeat_amount]; // Geht nicht, Werte werden nicht in diesen Array korrekt übertragen

if (!run_once)
{

for (int x = 0; x &lt; repeat_amount; x++)
{
ImageArray[x] = positionX + LoadedImage.GetWidth();
positionX = ImageArray[x];  
}

run_once = true;
}

for (int x = 0; x &lt; repeat_amount; x++)
{
ShowImage(gameWindow, ImageArray[x], positionY);
}
</code></pre>
<p>Lösung 2</p>
<pre><code>static bool run_once = false;

if (!run_once)
{
unsigned int ImageArray[repeat_amount]; // Werte werden übertragen, 
// Array jedoch nicht definiert für ShowImage
for (int x = 0; x &lt; repeat_amount; x++)
{
ImageArray[x] = positionX + LoadedImage.GetWidth();
positionX = ImageArray[x];  
}

run_once = true;
}

for (int x = 0; x &lt; repeat_amount; x++)
{
ShowImage(gameWindow, ImageArray[x], positionY);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/314997/array-out-of-scope</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 11:52:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314997.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Mar 2013 00:49:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array out of Scope on Thu, 21 Mar 2013 00:49:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich hab eine Frage zu folgendem Problem. Ich möchte eine Funktion definieren, die einen Array mit Integern einmal füllt (ImageArray) und anschließend als Argument für eine weitere Funktion (ShowImage) verwendet, welche in einer while Schleife immer wieder abgerufen werden soll.</p>
<p>Ich wollte dazu einen Array (ImageArray) nutzen. Wenn ich diesen Array innerhalb der if Abfrage verwendet, werden die Werte vernünftig gefüllt, jedoch befindet sich der Array dann innerhalb der if Schleife und er wird als nicht definiert von der ShowImage Funktion angegeben, wenn ich den Array außerhalb der if Schleife habe, wird er zwar von der Funktion gefunden, aber die Werte werden nicht richtig übertragen .... <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>
<p>Hat jemand vielleicht eine einfache und effiziente Lösung zu dem Problem parat? Mag sein, dass es sich dabei um eine Anfängerfrage handelt, aber ich komm einfach nicht auf eine befriedigende Lösung! <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>Hier der Code:</p>
<p>Lösung 1</p>
<pre><code>static bool run_once = false;
unsigned int ImageArray[repeat_amount]; // Geht nicht, Werte werden nicht in diesen Array korrekt übertragen

if (!run_once)
{

for (int x = 0; x &lt; repeat_amount; x++)
{
ImageArray[x] = positionX + LoadedImage.GetWidth();
positionX = ImageArray[x];  
}

run_once = true;
}

for (int x = 0; x &lt; repeat_amount; x++)
{
ShowImage(gameWindow, ImageArray[x], positionY);
}
</code></pre>
<p>Lösung 2</p>
<pre><code>static bool run_once = false;

if (!run_once)
{
unsigned int ImageArray[repeat_amount]; // Werte werden übertragen, 
// Array jedoch nicht definiert für ShowImage
for (int x = 0; x &lt; repeat_amount; x++)
{
ImageArray[x] = positionX + LoadedImage.GetWidth();
positionX = ImageArray[x];  
}

run_once = true;
}

for (int x = 0; x &lt; repeat_amount; x++)
{
ShowImage(gameWindow, ImageArray[x], positionY);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2308348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308348</guid><dc:creator><![CDATA[Cheerful Coder]]></dc:creator><pubDate>Thu, 21 Mar 2013 00:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to Array out of Scope on Thu, 21 Mar 2013 02:23:49 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du das Array auch static machen. So wird das jedenfalls nichts, da du das Array nur beim ersten Durchlauf initialisierst und bei späteren Läufen mit uninitialisierten Werten arbeitest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2308352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308352</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 21 Mar 2013 02:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to Array out of Scope on Thu, 21 Mar 2013 20:57:28 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Vielleicht solltest du das Array auch static machen. So wird das jedenfalls nichts, da du das Array nur beim ersten Durchlauf initialisierst und bei späteren Läufen mit uninitialisierten Werten arbeitest.</p>
</blockquote>
<p>Danke für die hilfreiche Antwort <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="😉"
    /> wenn ich den Array jedoch Static mache dann gibt der Compiler einen Error, dass der Array nicht konstant wäre...</p>
<p>Ich habe jetzt einen dynamischen Pointer verwendet, was auch funktioniert, aber jetzt weiß ich nicht wo ich den pointer wieder löschen kann, um Speicherlecks zu vermeiden <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>Er muss ja verfügbar sein, solange das Programm läuft. Wo lösche ich den Pointer am Besten und auf welche Weise? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Ich habe mehrere Dateien bzw. verschiedene Funktionen, in denen das Programm beendet werden kann.</p>
<pre><code>static bool run_once = false;
        static int *arraySize = new int [repeat_amount];
        static int *bufferArraySize = &amp;arraySize[0];
        *arraySize = -5;
         arraySize++;

            if (!run_once)
            {
            for (int x = 1; x &lt; repeat_amount + 1; x++, arraySize++)
            {
                *arraySize = positionX + LoadedImage.GetWidth();
                positionX = *arraySize;
            }
            run_once = true;
            }

            arraySize = bufferArraySize;

            for (int x = 0; x &lt; repeat_amount; x++, arraySize++)
                    ShowImage(gameWindow, *arraySize, positionY);

            arraySize = bufferArraySize;

            delete [] arraySize; // geht nicht, da der Pointer ja noch verwendet wird bis Programmende
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2308575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308575</guid><dc:creator><![CDATA[Cheerful Coder]]></dc:creator><pubDate>Thu, 21 Mar 2013 20:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Array out of Scope on Thu, 21 Mar 2013 21:25:01 GMT]]></title><description><![CDATA[<p>Verwende statt <code>new[]</code> und <code>delete[]</code> STL-Container wie <code>std::vector</code> . Dann klärt sich auch gerade die Frage bezüglich Löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2308584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308584</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 21 Mar 2013 21:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to Array out of Scope on Fri, 22 Mar 2013 11:17:43 GMT]]></title><description><![CDATA[<p>Cheerful Coder schrieb:</p>
<blockquote>
<p>Danke für die hilfreiche Antwort <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="😉"
    /> wenn ich den Array jedoch Static mache dann gibt der Compiler einen Error, dass der Array nicht konstant wäre...</p>
</blockquote>
<p>Unwahrscheinlich. Er wird wohl eher sagen, dass <code>repeat_amount</code> nicht konstant ist. In dem Fall ist aber dein ursprüngliches Programm auch nicht korrekt bzw. standard-konform, da Array-Größen immer konstant sein müssen. Nichtkonstante Arraygrößen sind eine Spracherweiterung im GCC.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2308711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308711</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 22 Mar 2013 11:17:43 GMT</pubDate></item></channel></rss>