<?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[Dynamisches Array]]></title><description><![CDATA[<p>ich habe volgendes problem ich muss eine Methode schreiben mit der man ein array auf das doppelte seines aktuellen wertes vergrößert. die im array abgelegten objekte sollen dann in das neue array(doppelte größe) gespeichert werden.</p>
<p>mir ist inzwischen klar, dass ich new, std::copy, delet verwenden muss aber nicht wie.</p>
<p>Hier mein code der sicher nicht funzt aber weiter komme ich nicht.</p>
<p>objects_[capacity_] ist das ausgangs array</p>
<p>void Inventory::expandArray()<br />
{<br />
newCapacity_ = capacity_ * 2; //capazity_ ist die aktuelle größe<br />
Objects cObjects_[newCapacity];<br />
int *a3 = new Object [newCapazity_];<br />
std::copy(objects_, objects+capazity, a3);<br />
setCapazity(newCapazity);<br />
delete[] a3; //NICHT VERGESSEN!<br />
}</p>
<p>in zeile 4 wollte ich ein array anlegen in dem die Daten zwischengespeichert werden(ist das überhaupt nötig.</p>
<p>zeile 5 verstehe ich nicht is aus einem bsp. ausm internet wo 2 arrays zusammengefühgt werden</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263278/dynamisches-array</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 21:36:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263278.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Mar 2010 10:12:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 10:12:31 GMT]]></title><description><![CDATA[<p>ich habe volgendes problem ich muss eine Methode schreiben mit der man ein array auf das doppelte seines aktuellen wertes vergrößert. die im array abgelegten objekte sollen dann in das neue array(doppelte größe) gespeichert werden.</p>
<p>mir ist inzwischen klar, dass ich new, std::copy, delet verwenden muss aber nicht wie.</p>
<p>Hier mein code der sicher nicht funzt aber weiter komme ich nicht.</p>
<p>objects_[capacity_] ist das ausgangs array</p>
<p>void Inventory::expandArray()<br />
{<br />
newCapacity_ = capacity_ * 2; //capazity_ ist die aktuelle größe<br />
Objects cObjects_[newCapacity];<br />
int *a3 = new Object [newCapazity_];<br />
std::copy(objects_, objects+capazity, a3);<br />
setCapazity(newCapazity);<br />
delete[] a3; //NICHT VERGESSEN!<br />
}</p>
<p>in zeile 4 wollte ich ein array anlegen in dem die Daten zwischengespeichert werden(ist das überhaupt nötig.</p>
<p>zeile 5 verstehe ich nicht is aus einem bsp. ausm internet wo 2 arrays zusammengefühgt werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870749</guid><dc:creator><![CDATA[EvilStuff]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 10:19:48 GMT]]></title><description><![CDATA[<p>So in etwa:</p>
<pre><code class="language-cpp">int *oldarray; 
int oldarray_size; //gehen wir mal davon aus das beide sinnvoll gefüllt sind

// erweitern:
int *newarray = new int[oldarray_size*2];
std::copy(oldarray, oldarray+oldarray_size, newarray);
delete oldarray[];
oldarray = newarray;
oldarray_size *= 2;
</code></pre>
<p>oder aber natürlich:</p>
<pre><code class="language-cpp">std::vector&lt;Object&gt; alt;
alt.resize(alt.size() * 2);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870751</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:19:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 10:24:48 GMT]]></title><description><![CDATA[<p>Das hat mir sehr weitergeholfen ich hab irgendwie das problem dass ich weis was ich ungefähr machen muss es aber nicht in einem gescheiten code formulieren kann.</p>
<p>das wird dann halt einfach die übung sein oder?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870756</guid><dc:creator><![CDATA[EvilStuff]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 10:27:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Inventory::expandArray()
{
   // Schritt 1: temporäres Array erzeugen
   Objects_* tmp = new Objects[capacity_ *2];

   // Schritt 2: bestehende Daten kopieren
   std::copy( objects_, objects_ + capacity_, tmp );

   // Schritt 3: bestehende Daten löschen
   delete[] objects_;

   // Schritt 4: aktuelle Daten und neue Kapazität merken 
   objects_ = tmp;
   capacity_ *= 2;
}
</code></pre>
<p>Das Problem an deiner Zeile 4 ist, dass du ein lokales Array auf dem Stack anlegst. Wenn deine Objekte relativ groß und die Anzahl der Objekte ebenfalls recht groß sind kann es passieren, dass du nicht genügend Platz auf dem Stack hast, um das Array zu erzeugen -&gt; boom, Programm bleibt mit Stacküberlauf stehen.</p>
<p>Zeile 5 ist Standardvorgehen der STL, da werden Objekte von Ort A nach Ort B kopiert, es ist eine Art memcpy, bei der C++ Objekte korrekt kopiert werden. Gibt´s im INet jede Menge Hilfe zu, einfach mal google befragen.</p>
<p>PS:<br />
Der Code oben ist nicht exception-safe, bei einer Exception während des Kopierens entsteht ein Speicherleck. Experten können gerne Verbesserungsvorschläge anbieten.</p>
<p>PPS:<br />
Dein komplettes Inventory kann durch std::vector ersetzt werden, das solltest du tun, wenn es sich nicht um eine Programmieraufgabe handelt, die ein Verständnis für dynamische Speicherverwaltung vermitteln soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870758</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:27:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 10:51:49 GMT]]></title><description><![CDATA[<p>void Inventory::expandArray()<br />
{<br />
// Schritt 1: temporäres Array erzeugen<br />
Objects * tmp = new Objects [capacity_ *2];</p>
<p>// Schritt 2: bestehende Daten kopieren<br />
std::copy( objects_, objects_ + capacity_, tmp );</p>
<p>// Schritt 3: bestehende Daten löschen<br />
delete[] objects_;</p>
<p>// Schritt 4: aktuelle Daten und neue Kapazität merken<br />
objects_ = tmp;<br />
capacity_ *= 2;<br />
}</p>
<p>so nur mehr zum (hoffentlich) totalem verständnis.</p>
<p>schr.1:<br />
ich erzeuge einen pointer tmp vom typ objects und weise dem die doppelte größe zu.Hmm wenn eh der pointer weis, dass Objects daherkommen erspare ich mir nicht dann = new &quot;Objects&quot; [capazity*2] also das 2te Objects? bzw was macht new in diesem fall genau</p>
<p>Schritt 2:<br />
is klar hab ich gegoogled thx Schritt 3 auch</p>
<p>Schritt 4<br />
hab gar nicht gewusst, dass man einem Array sagen kann sei genau so wie das andere.<br />
bei x=2;<br />
y=x;<br />
war es klar.</p>
<p>P.S.: wie kann ich so einen code posten so wie ihr das macht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870767</guid><dc:creator><![CDATA[EvilStuff]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 10:58:37 GMT]]></title><description><![CDATA[<p>[.cpp]...[./cpp] ohne die . in den Klammern.</p>
<p>Das &quot;new&quot; fordert den Speicher auf dem Heap an. Das heißt du hast ab dann auch die Verantwortung den wieder freizugeben wenn er nicht mehr benötigt wird (wie du es mit dem delete[] für das alte Array machst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870771</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:58:37 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 11:02:24 GMT]]></title><description><![CDATA[<p>Codetags benutzen:</p>
<pre><code class="language-cpp">und
</code></pre>
<p>Du solltest vielleicht ein bisschen Zeit in das Verständnis von Zeigern stecken, wenn dir nicht klar ist, warum man Zeiger einander zuweisen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870775</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 18 Mar 2010 11:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 11:04:20 GMT]]></title><description><![CDATA[<p>EvilStuff schrieb:</p>
<blockquote>
<p>schr.1:<br />
ich erzeuge einen pointer tmp vom typ objects und weise dem die doppelte größe zu.Hmm wenn eh der pointer weis, dass Objects daherkommen erspare ich mir nicht dann = new &quot;Objects&quot; [capazity*2] also das 2te Objects? bzw was macht new in diesem fall genau</p>
</blockquote>
<p>Oha. Grundlagen lernen!<br />
Du hast einen Pointer tmp auf ein Objects. New erzeugt ein Array von Objectss mit 2*capacity. Die Adresse dieses Arrays wird tmp zugewiesen.</p>
<blockquote>
<p>Schritt 4<br />
hab gar nicht gewusst, dass man einem Array sagen kann sei genau so wie das andere.<br />
bei x=2;<br />
y=x;<br />
war es klar.</p>
</blockquote>
<p>Oha. Grundlagen lernen!<br />
Du hast einen Pointer objects_ auf Objects. Und einen Pointer tmp auf Objects. Pointer kann man einander zuweisen. Somit zeigt objects_ hinterher auf das Array auf das tmp zeigt. Ansonsten passiert da nichts.</p>
<blockquote>
<p>P.S.: wie kann ich so einen code posten so wie ihr das macht</p>
</blockquote>
<p>Guck mal unter dem Editierfeld, bei den Smileys. Da sind auch lauter andere tolle Optionen zur Textformatierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870777</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 18 Mar 2010 11:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 11:27:20 GMT]]></title><description><![CDATA[<p>ich geb mein bestes die grundlagen zu lernen.<br />
das ist mein erstes Bsp. und das gleich mit .h .cpp und die main wurde bereitgestellt(ausser die aus meinem C++ Buch).<br />
ich geb zu ich bin total überfordert mit dem ganzen deshalb hab ich ja in einem Forum gepostet.<br />
Also hoffe ich auf nachsicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870789</guid><dc:creator><![CDATA[EvilStuff]]></dc:creator><pubDate>Thu, 18 Mar 2010 11:27:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 12:58:33 GMT]]></title><description><![CDATA[<p>Was bedeutet</p>
<pre><code class="language-cpp">Object** objects_[capacity_]
capacity=1
</code></pre>
<p>dass ich ein Pointer Array(objects_) vom Typ Object anlege und es im selben schritt dereferenziere d.h. ich habe dann wenn ich das object_ Array an stelle 0 z.b.: so aufrufe</p>
<pre><code class="language-cpp">Object test;
test = object_[0]
</code></pre>
<p>nicht die adresse sondern die darin gespeicherte info an test weitergegeben habe oder?!?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870827</guid><dc:creator><![CDATA[Evilstuff]]></dc:creator><pubDate>Thu, 18 Mar 2010 12:58:33 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 13:04:01 GMT]]></title><description><![CDATA[<p>Evilstuff schrieb:</p>
<blockquote>
<p>Was bedeutet</p>
<pre><code class="language-cpp">Object** objects_[capacity_]
capacity=1
</code></pre>
<p>dass ich ein Pointer Array(objects_) vom Typ Object anlege und es im selben schritt dereferenziere d.h. ich habe dann wenn ich das object_ Array an stelle 0 z.b.: so aufrufe</p>
<pre><code class="language-cpp">Object test;
test = object_[0]
</code></pre>
<p>nicht die adresse sondern die darin gespeicherte info an test weitergegeben habe oder?!?!?</p>
</blockquote>
<p>Nein. <code>Object** objects_[capacity_]</code> ist einfach ein Zeiger auf einen Zeiger auf ein Array von Objects. Und <code>test = object_[0]</code> dürfte gar nicht compilieren (hast du es ausprobiert?) weil du versuchst, einem Object einen Zeiger auf ein Array von Objects zuzuweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870829</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 18 Mar 2010 13:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 13:12:02 GMT]]></title><description><![CDATA[<p>nein ich habs nicht compiliert. da alles in meiner klasse noch nicht funzt. in meiner literatur werden zwar zeiger behandelt aber nicht zeiger auf zeiger und ka. was. man sollte sich das anscheinend dann selbst zusammenreimen und du sihst ja was dabei rauskommt. in meiner vorlesung wurde dass auch nicht behandelt es hat den anschein als würde die aufgabe nach dem motto friss un stirb sein. nach mehrmaligen durchlesen meines buches bin ich noch immer kein stück gescheiter kann sein dass es an mir ligt oder an der kompexität der aufgabenstellung.</p>
<p>ich versuch jez schon seit 2 ner woche das ganze hinzubekommen aber ich weis nicht <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="😕"
    /><br />
kannst du mir noch etwas empfehlen damit ich c++ besser checke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870832</guid><dc:creator><![CDATA[EvilStuff]]></dc:creator><pubDate>Thu, 18 Mar 2010 13:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 13:44:22 GMT]]></title><description><![CDATA[<p>Evilstuff schrieb:</p>
<blockquote>
<p>[...]<br />
Schritt 4<br />
hab gar nicht gewusst, dass man einem Array sagen kann sei genau so wie das andere.<br />
bei x=2;<br />
y=x;<br />
war es klar.</p>
</blockquote>
<p><code>objects_</code> war -- obwohl das eigentlich nie explizit erwähnt wurde -- ein Zeiger und kein Array. Das ist ein großer Unterschied. Mit <code>objects_ = tmp;</code> wurde der Zeiger auf das neue vergrößerte Array umgebogen.</p>
<p>Evilstuff schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Object** objects_[capacity_]
capacity=1
</code></pre>
</blockquote>
<p>Das ergibt nicht viel Sinn. Das erste wäre eine Definition eines Arrays mit statischer Größe: <code>object_</code> ist ein Array von <code>capacity_</code> vielen Zeigern auf Zeigern auf Objekte des Typs <code>Object</code> . Damit das klappt, müsste <code>capacity_</code> aber eine Compile-Zeit-Konstante sein. Ich glaube auch nicht, dass es das ist, was Du willst.</p>
<blockquote>
<p>ich versuch jez schon seit 2 ner woche das ganze hinzubekommen aber ich weis nicht <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="😕"
    /><br />
kannst du mir noch etwas empfehlen damit ich c++ besser checke</p>
</blockquote>
<p>Du hast Zeiger und Arrays noch nicht 100%ig verstanden. Versuch das nachzuholen.</p>
<pre><code class="language-cpp">int meinefunktion(int n) {
  int foo[] = {1,2,3};  // foo ist vom Typ int[3] -- ein Array mit einer
                        // Länge, die zur Compile-Zeit feststeht. foo ist
                        // kein Zeiger, sondern direkt eine Sammlung von 3
                        // hintereinander liegenden ints im automatischen
                        // Speicherbereich -- also der Ort, wo &quot;normale lokale
                        // Variablen&quot; auch leben.

  int* p = foo;         // p ist ein Zeiger auf int. Hier findet
                        // &quot;array to pointer decay&quot; statt. p wird mit
                        // der Adresse des ersten Array-Elements initialisiert.

  p[2] += 5;            // sieht nach Array-Syntax aus, p ist aber immer noch
                        // ein Zeiger. Der Klammer-Operator bei p[2] ist hier
                        // eine Abkürzung für *(p+2). --&gt; Zeigerarithmetik +
                        // Dereferenzieren.

  int* q = new int[n];  // q ist auch ein Zeiger auf int. In diesem Fall auf das
                        // erste Element eines n-elementigen dynamischen Arrays.
                        // Der Wert von n ist zur Compile-Zeit noch nicht
                        // bekannt.

  for (int i=0; i&lt;n; ++i)
    q[i] = 99;          // Werte der Array-Elemente auf 99 setzen.

  delete[] q;           // Löschen des dynamischen Arrays

  return foo[2];        // gibt den Wert 8 zurück
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870850</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 13:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 13:48:21 GMT]]></title><description><![CDATA[<p>EvilStuff schrieb:</p>
<blockquote>
<p>ich versuch jez schon seit 2 ner woche das ganze hinzubekommen aber ich weis nicht <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="😕"
    /><br />
kannst du mir noch etwas empfehlen damit ich c++ besser checke</p>
</blockquote>
<p>Dann bietet sich ein anderes Lehrbuch an. Was benutzt du denn derzeit?</p>
<p>Wenn es speziell um das Thema Pointer geht, wird man sicher auch gute Online-Tutorials dazu finden. Die meisten allgemeinen Tutorials sind zwar ziemlich schlecht, aber zu speziellen Fragen gibt es gute Anleitungen. Zur Not auch reine C statt C++ Tutorials - die Behandlung und der Nutzen von Zeigern ist in beiden Sprachen ziemlich gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870854</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 18 Mar 2010 13:48:21 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Thu, 18 Mar 2010 15:12:55 GMT]]></title><description><![CDATA[<p>Ich denke beim Thema Zeiger ist es oftmals auch ganz nützlich eine Stufe weiter runter zu gehen und sich klar zu machen, wie üblicherweise Speicher aufgebaut ist und wie da Daten drin gespeichert sind. Wenn man das einmal in etwa begreift, dann eribt sich die Funktionsweise von Zeigern recht schnell von selbst.</p>
<p>Ein gutes (besseres?) Buch ist aber auch eine gute Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870901</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:12:55 GMT</pubDate></item></channel></rss>