<?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[Dynamische Arraygrössen]]></title><description><![CDATA[<p>Hallo zusammen..<br />
Ich habe eine kurze Frage zu einem Array mit dynamischer Grösse.</p>
<pre><code class="language-cpp">int* array;
int size = 10;
array = new int[size];

for(int i=0; i&lt;size; i++){
  array[i] = i+1;
}

array[10] = 5; // hier meckert der Compiler nicht aber ich frage mich trotzdem, ob das erlaubt ist, da mein Array ja eigentlich nur 10 Elemente hat und ich hier das elfte Element benutze.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/193559/dynamische-arraygrössen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 02:18:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193559.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Sep 2007 07:50:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 07:50:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen..<br />
Ich habe eine kurze Frage zu einem Array mit dynamischer Grösse.</p>
<pre><code class="language-cpp">int* array;
int size = 10;
array = new int[size];

for(int i=0; i&lt;size; i++){
  array[i] = i+1;
}

array[10] = 5; // hier meckert der Compiler nicht aber ich frage mich trotzdem, ob das erlaubt ist, da mein Array ja eigentlich nur 10 Elemente hat und ich hier das elfte Element benutze.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1373616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373616</guid><dc:creator><![CDATA[Fidore]]></dc:creator><pubDate>Thu, 27 Sep 2007 07:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 07:52:50 GMT]]></title><description><![CDATA[<p>Ist natürlich nicht erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373620</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 27 Sep 2007 07:52:50 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 07:53:39 GMT]]></title><description><![CDATA[<p>klappt bei mir auch - noch einige elemente weiter. Aber nach unbestimmter Anzahl Elemente kannst du Probleme kriegen. ICh würde es in jedem Fall so nicht machen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373621</guid><dc:creator><![CDATA[piXelshooter]]></dc:creator><pubDate>Thu, 27 Sep 2007 07:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 07:54:15 GMT]]></title><description><![CDATA[<p>Der Compiler meckert nicht, weil er nicht feststellen kann, wie groß das Array nun tatsächlich ist (in dieser Konstellation vielleicht, aber generell wird's schwierig). Trotzdem ist das Ergebnis der Aktion undefiniert (und das kann in der Praxis bis zu einem Absturz führen - theoretisch ist ALLES erlaubt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373622</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 07:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 10:21:56 GMT]]></title><description><![CDATA[<p>Ok dann erstmal danke für die Antworten.</p>
<p>Es scheint ja manchmal ein Problem zu sein, dass der Compiler zu gutherzig ist und auf solche Fehler nicht hinweist.<br />
Ich frage mich jetzt, ob der folgende Code auch Sachen enthält, die zwar funktionieren aber dennoch nicht erlaubt sind. Vielleicht hat der eine oder andere mal Lust sich das anzuschauen und mir zu sagen, ob das so ok ist oder ob ich da Dinge eingebaut habe, die mir irgendwann um die Ohren fliegen könnten. Bei dem Codestückchen geht es allerdings weniger darum, ob es sinvoll ist oder nicht, sondern eher darum, ob der Code korrekt ist und nicht irgendwann mal Probleme macht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void array_push(int* arr, int &amp;size, int value){

	int* pNewArray;
	pNewArray = new int[size];

	for(int i=0; i&lt;size; i++){
		pNewArray[i] = arr[i];
	}

	delete[] arr;
	size++;
	arr = new int[size];

	for(i=0; i&lt;size-1; i++){
		arr[i] = pNewArray[i];
	}

	arr[size-1] = value;
}

int main(){

	int* str;
	int size = 10;

	str = new int[size];

	for(int i=0; i&lt;size; i++){
		str[i] = i+1;
		cout &lt;&lt; str[i] &lt;&lt; endl;
	}

	cout &lt;&lt; endl;

	array_push(str, size, 199);
	array_push(str, size, 562);
	array_push(str, size, 843);

	for(i=0; i&lt;size; i++){
		cout &lt;&lt; str[i] &lt;&lt; endl;
	}

	delete[] str;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1373736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373736</guid><dc:creator><![CDATA[Fidore]]></dc:creator><pubDate>Thu, 27 Sep 2007 10:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 10:43:48 GMT]]></title><description><![CDATA[<p>Der Code verursacht zumindest ein Speicherleck (pNewArray wird bei jedem Funktionsaufruf neu angelegt, aber nie freigegeben), außerdem ist er alles andere als sicher (du verlässt dich darauf, daß size und arr nie außerhalb der push_array() geändert werden).</p>
<p>Außerdem übergibst du arr per wert, so daß sich die Änderungen in der Funktion (Neu-Zuweisungen) nicht auf das Hauptprogramm auswirken - das geht hier anscheinend gut, weil der Heap-Manager genug Reserven übrig hat, um dir jedes Mal den selben Speicherblock zuzuweisen. (Primitivlösung: <code>int*&amp;arr</code> )</p>
<p>PS: Auch wenn du nicht über den Sinn reden wolltest: Statt solcher Spielereien solltest du besser mit std::vector&lt;&gt; arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373755</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 10:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 11:48:08 GMT]]></title><description><![CDATA[<p>Danke für die einleuchtenden Kommentare.<br />
Habe schon einiges über std::vector&lt;&gt; gelesen und auch verstanden, dass es die bessere Lösung wäre. Aber erstmal versuche ich hinter einige andere Dinge zu steigen, da ich, wie man an diesem Beispiel sieht, auch bei anderen Dingen (wie z.b. Zeigern) meine Problemchen habe. Jedenfalls war dein Post wirklich hilfreich, also vielen Dank dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373803</guid><dc:creator><![CDATA[Fidore]]></dc:creator><pubDate>Thu, 27 Sep 2007 11:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 11:51:39 GMT]]></title><description><![CDATA[<p>Eins vielleicht noch:</p>
<p>Du nanntest die &quot;Primitivlösung&quot;</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>[c]int*&amp;arr[/c</p>
</blockquote>
<p>Was wäre denn die bessere Lösung? Oder könnte man es bedenkenlos so machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373806</guid><dc:creator><![CDATA[Fidore]]></dc:creator><pubDate>Thu, 27 Sep 2007 11:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 12:14:24 GMT]]></title><description><![CDATA[<p>Die bessere Lösung ist es, std::vector&lt;&gt; zu verwenden (oder eine eigene Containerklasse zu schreiben, die dein arr und size intern kapselt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373831</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 12:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 13:08:22 GMT]]></title><description><![CDATA[<p>Ehm wenn du schon Arrays nutzen willst:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;

namespace array
{
    template &lt;typename T&gt;
    void resize(T*&amp; ptr, std::size_t old_size, std::size_t size)
    {
        T* tmp = new T[size];
        std::copy(ptr, ptr + std::min&lt;std::size_t&gt;(size, old_size), tmp);
        delete [] ptr;
        ptr = tmp;
    }
    template &lt;typename T&gt;
    void push_back(T*&amp; ptr, std::size_t&amp; size, T const&amp; data)
    {
        resize(ptr, size, size + 1);
        ptr[size++] = data;
    }
}
</code></pre>
<p>...</p>
<pre><code class="language-cpp">int main()
{
    int* arr = new int[10];
    array::resize(arr, 10, 14);
    array::push_back(arr, 14, 10);
    std::cout &lt;&lt; arr[14] &lt;&lt; std::endl;
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373849</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 27 Sep 2007 13:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 12:41:46 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename T&gt;
    void push_back(T*&amp; ptr, std::size_t&amp; size, T const&amp; data)
    {
        resize(ptr, size, ++size);
        ptr[size] = data;
    }
}
</code></pre>
<p>...</p>
</blockquote>
<p>Sehr gefährlich - erstens ist nicht garantiert, in welcher Reihenfolge Funktionsargumente ausgewertet werden (wenn das von hinten nach vorne geschieht, übergibst du den falschen Wert als alte Größe) und Nebeneffekte sich auswirken und zweitens ist ptr[size] garantiert außerhalb des reservierten Speicherbereiches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373857</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 12:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 13:08:02 GMT]]></title><description><![CDATA[<p>ehm sorry ich korrigier es kurz ^^ Tippfehler <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/1373872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373872</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 27 Sep 2007 13:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 13:33:52 GMT]]></title><description><![CDATA[<p>Noch eine letzte Frage:</p>
<p>Hat es einen besonderen Grund, dass ich hier fast alle nur beispielsweise std::cout nutzen sehe, statt &quot;using namespace std; cout &lt;&lt; etc.&quot;? Gibt es einen Vor- bzw. Nachteil bei einer der Varianten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373892</guid><dc:creator><![CDATA[Fidore]]></dc:creator><pubDate>Thu, 27 Sep 2007 13:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Arraygrössen on Thu, 27 Sep 2007 13:35:58 GMT]]></title><description><![CDATA[<p>Für kurze Programmbeispiele nehme ich normalerweise std::..., um explizit auf Standardfunktionen hinzuweisen, ansonsten ist using durchaus beliebter.</p>
<p>(wobei man bei using auch vorsichtig sein sollte, gerade in Headern provozierst du damit förmlich Namenskonflikte)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373894</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Sep 2007 13:35:58 GMT</pubDate></item></channel></rss>