<?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[Dynmaisches Array mit globalem Scope]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nach stundenlangem hoffnungslosem Brüten hoffe ich, hier geholfen zu werden <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>Folgendes: Ich soll einen Stack mithilfe eines dynamischen Arrays erstellen. Dazu soll zu Beginn ein dyn. Array mit 2 Elementen erstellt werden.</p>
<p>Mittels Funktionen werden dann die üblichen Befehle push(), pop() etc. ausgeführt. Wir sollen jetzt sobald das Array zu klein ist, ein neues Array zur Laufzeit erstellen, das doppelt so viele Elemente wie das erste enthält, den Inhalt des alten hineinkopieren und das alte löschen.</p>
<p>Meine prinzipielle Vorgehensweise:</p>
<pre><code class="language-cpp">int *stack = new int[2];

void init(int laenge, int uebergabe_param[]) { //nimmt die übergebenen Parameter in den Stack }
int pop() {}
void push (element) {}
void clear ()
void test() { //Funktion, mit der man über die Kommandozeile den Stack testen kann, indem push, pop etc. aufgerufen werden }
int main(int argc, int * argv[])
 {
 if(argc &gt; 1) init(argc-1, argv);
 test()
 clear ()
 return 0;
}
</code></pre>
<p>Problem ist jetzt folgendes: Nehme ich an dem Array stack[] Änderungen vor, sind diese schön global sichtbar, so wies sein soll. Jetzt passiert aber entweder bei init() oder push() ein Überlauf, das heisst ich muss das Array grösser machen.<br />
Also:</p>
<pre><code class="language-cpp">//ganzes stack[] in stat. temp[] umkopieren
delete [] stack; 
int *stack = new int[doppelte_länge];
//temp nach stack kopieren
//zusätzlich neues Element in stack kopieren
</code></pre>
<p>Das funktioniert hervorragend innerhalb von init() und push(). Ausserhalb dieser Funktionen ist von meinem neuen grösseren Array aber rein gar nichts übrig -.-<br />
Beim Zugriff erhalte ich nur Mist, das Array läuft über und beim Beenden des Programms erscheint:</p>
<pre><code>a11(5807) malloc: *** error for object 0x100100080: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap
</code></pre>
<p>Was mach ich falsch? Wie schaffe ich es, innerhalb einer Funktion ein dynamisches Array mit globalem Scope zu erstellen, sodass ich es von allen Funktionen heraus manipulieren und auslesen kann. Bin total verzweifelt, sitze schon den ganzen Nachmittag an diesem Mist....</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277209/dynmaisches-array-mit-globalem-scope</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:22:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277209.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Nov 2010 20:11:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynmaisches Array mit globalem Scope on Sun, 14 Nov 2010 20:13:09 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nach stundenlangem hoffnungslosem Brüten hoffe ich, hier geholfen zu werden <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>Folgendes: Ich soll einen Stack mithilfe eines dynamischen Arrays erstellen. Dazu soll zu Beginn ein dyn. Array mit 2 Elementen erstellt werden.</p>
<p>Mittels Funktionen werden dann die üblichen Befehle push(), pop() etc. ausgeführt. Wir sollen jetzt sobald das Array zu klein ist, ein neues Array zur Laufzeit erstellen, das doppelt so viele Elemente wie das erste enthält, den Inhalt des alten hineinkopieren und das alte löschen.</p>
<p>Meine prinzipielle Vorgehensweise:</p>
<pre><code class="language-cpp">int *stack = new int[2];

void init(int laenge, int uebergabe_param[]) { //nimmt die übergebenen Parameter in den Stack }
int pop() {}
void push (element) {}
void clear ()
void test() { //Funktion, mit der man über die Kommandozeile den Stack testen kann, indem push, pop etc. aufgerufen werden }
int main(int argc, int * argv[])
 {
 if(argc &gt; 1) init(argc-1, argv);
 test()
 clear ()
 return 0;
}
</code></pre>
<p>Problem ist jetzt folgendes: Nehme ich an dem Array stack[] Änderungen vor, sind diese schön global sichtbar, so wies sein soll. Jetzt passiert aber entweder bei init() oder push() ein Überlauf, das heisst ich muss das Array grösser machen.<br />
Also:</p>
<pre><code class="language-cpp">//ganzes stack[] in stat. temp[] umkopieren
delete [] stack; 
int *stack = new int[doppelte_länge];
//temp nach stack kopieren
//zusätzlich neues Element in stack kopieren
</code></pre>
<p>Das funktioniert hervorragend innerhalb von init() und push(). Ausserhalb dieser Funktionen ist von meinem neuen grösseren Array aber rein gar nichts übrig -.-<br />
Beim Zugriff erhalte ich nur Mist, das Array läuft über und beim Beenden des Programms erscheint:</p>
<pre><code>a11(5807) malloc: *** error for object 0x100100080: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap
</code></pre>
<p>Was mach ich falsch? Wie schaffe ich es, innerhalb einer Funktion ein dynamisches Array mit globalem Scope zu erstellen, sodass ich es von allen Funktionen heraus manipulieren und auslesen kann. Bin total verzweifelt, sitze schon den ganzen Nachmittag an diesem Mist....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1980468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1980468</guid><dc:creator><![CDATA[suffix]]></dc:creator><pubDate>Sun, 14 Nov 2010 20:13:09 GMT</pubDate></item><item><title><![CDATA[Reply to Dynmaisches Array mit globalem Scope on Sun, 14 Nov 2010 20:16:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int *stack = new int[doppelte_länge];
</code></pre>
<p>Dann ueberleg mal wie lang der zeiger lebt ... und gratulation zum MemLeak <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1980474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1980474</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sun, 14 Nov 2010 20:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dynmaisches Array mit globalem Scope on Sun, 14 Nov 2010 20:19:33 GMT]]></title><description><![CDATA[<p>suffix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//ganzes stack[] in stat. temp[] umkopieren
delete [] stack; 
int *stack = new int[doppelte_länge];
//temp nach stack kopieren
//zusätzlich neues Element in stack kopieren
</code></pre>
</blockquote>
<p>Ich wäre so vorgegangen:</p>
<pre><code class="language-cpp">void check(int neue_länge)
{
  if (neue_länge&lt;=alte_länge)
    return;

  int *new_stack = new int[doppelte_länge];
  //ganzes stack[] in stat. new_stack[] umkopieren
  delete [] stack;
  //zusätzlich neues Element in new_stack kopieren 	
  stack = new_stack;
}
</code></pre>
<p>Die Funktion wird dann von allen anderen Funktionen, die Änderungen am Array vornehmen aufgerufen.<br />
Ist es eigentlich erlaubt, Klassen zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1980475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1980475</guid><dc:creator><![CDATA[vorgänger]]></dc:creator><pubDate>Sun, 14 Nov 2010 20:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to Dynmaisches Array mit globalem Scope on Sun, 14 Nov 2010 20:28:25 GMT]]></title><description><![CDATA[<p>vorgänger schrieb:</p>
<blockquote>
<p>Ich wäre so vorgegangen:</p>
<pre><code class="language-cpp">void check(int neue_länge)
{
  if (neue_länge&lt;=alte_länge)
    return;

  int *new_stack = new int[doppelte_länge];
  //ganzes stack[] in stat. new_stack[] umkopieren
  delete [] stack;
  //zusätzlich neues Element in new_stack kopieren 	
  stack = new_stack;
}
</code></pre>
<p>Die Funktion wird dann von allen anderen Funktionen, die Änderungen am Array vornehmen aufgerufen.<br />
Ist es eigentlich erlaubt, Klassen zu verwenden?</p>
</blockquote>
<p>Klassen hatten wir noch nicht behandelt, dürfen wir dann wohl auch nicht verwenden...<br />
Ich verstehe deinen Code nicht so ganz. In dem Moment, wo du delete [] stack; ausführst, ist doch der globale Array weg? Wie funktioniert dann die Zuweisung stack = new stack; ? (Ich nehme an, ich soll hier ganz normal elementeweise umkopieren).</p>
<p>Zum Beispiel pop() nimmt ja auch Änderungen am stack vor. pop muss ja aber nicht checken ob ein Überlauf stattfinden würde. Kann ich in so einem Fall ganz normal auf stack[] zugreifen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1980479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1980479</guid><dc:creator><![CDATA[suffix]]></dc:creator><pubDate>Sun, 14 Nov 2010 20:28:25 GMT</pubDate></item></channel></rss>