<?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[C++ und Arrays]]></title><description><![CDATA[<p>Hallo alle zusammen,</p>
<p>die Frage kam schon öfters, aber trotzdem.</p>
<p>Ich muss ein Array mit einer Längenvariablen nutzen, die erst zur Laufzeit bekannt ist.</p>
<p>Sprich so etwa:<br />
int a[var];<br />
Das Problem ist, dass ich keinen Pointer nehmen kann und, dass ich auch keine Liste nehmen kann um toArray() auszunutzen. Es muss aber ein 'echtes' c-Array sein. Ich nutze eine Bibliothek, die unbedingt ein Array und keinen Pointer haben will (auch keine selbstgebastelete Klasse, die ein Array imitiert).<br />
Fragt mich nicht, warum das mit einem Pointer nicht geht, habe mich auch gewundert, aber naja...</p>
<p>Gibt es denn die Möglichkeit, ein Array mit einer Größe zu erstellen, die zur Kompelierzeit nicht bekannt ist???</p>
<p>Ich nutze VisualStudio C++ 6.0...</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/187552/c-und-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 19:43:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187552.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Jul 2007 18:35:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 18:37:11 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen,</p>
<p>die Frage kam schon öfters, aber trotzdem.</p>
<p>Ich muss ein Array mit einer Längenvariablen nutzen, die erst zur Laufzeit bekannt ist.</p>
<p>Sprich so etwa:<br />
int a[var];<br />
Das Problem ist, dass ich keinen Pointer nehmen kann und, dass ich auch keine Liste nehmen kann um toArray() auszunutzen. Es muss aber ein 'echtes' c-Array sein. Ich nutze eine Bibliothek, die unbedingt ein Array und keinen Pointer haben will (auch keine selbstgebastelete Klasse, die ein Array imitiert).<br />
Fragt mich nicht, warum das mit einem Pointer nicht geht, habe mich auch gewundert, aber naja...</p>
<p>Gibt es denn die Möglichkeit, ein Array mit einer Größe zu erstellen, die zur Kompelierzeit nicht bekannt ist???</p>
<p>Ich nutze VisualStudio C++ 6.0...</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329446</guid><dc:creator><![CDATA[mHochbach]]></dc:creator><pubDate>Fri, 20 Jul 2007 18:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 18:38:58 GMT]]></title><description><![CDATA[<p>mHochbach schrieb:</p>
<blockquote>
<p>Gibt es denn die Möglichkeit, ein Array mit einer Größe zu erstellen, die zur Kompelierzeit nicht bekannt ist???</p>
</blockquote>
<p>Nein gibt es nicht. Nicht so wie du es willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329450</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 20 Jul 2007 18:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 18:49:29 GMT]]></title><description><![CDATA[<p>Hat die funktion einen parameter á la func(size_t len, int arr[]) oder ist es etwas mit templates?</p>
<p>Bei templates geht es nicht(spezialisierung zur compile-zeit), beim array kannst du einfach einen pointer übergeben(natürlich nur mit dem größenparameter), oder falls es soetwas nicht gibt, kannst du auch erst einmal eine feste übergabe einprogrammieren, dann in die assembler sicht wechseln, und den code kopieren und umgewandelt als inline assembler einzufügen(zumindest bei x86).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329454</guid><dc:creator><![CDATA[Dennis123]]></dc:creator><pubDate>Fri, 20 Jul 2007 18:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 18:54:58 GMT]]></title><description><![CDATA[<p>mHochbach schrieb:</p>
<blockquote>
<p>Fragt mich nicht, warum das mit einem Pointer nicht geht, habe mich auch gewundert, aber naja...</p>
</blockquote>
<p>frag' ich dich aber. normalerweise kann man fast überall wo ein array erwartet wird auch pointer nehmen.<br />
ansonsten: nimm <em>C99</em>, da gibt es <em>variable-length arrays</em>. die werden tatsächlich so angelegt, wie du es haben willst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329457</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 20 Jul 2007 18:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 19:49:10 GMT]]></title><description><![CDATA[<p>mHochbach schrieb:</p>
<blockquote>
<p>Fragt mich nicht, warum das mit einem Pointer nicht geht, habe mich auch gewundert, aber naja...</p>
</blockquote>
<p>Dann frage ich, wie eine typische Funktionsdeklaration mit so einem Parameter aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329475</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 20 Jul 2007 19:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 20:28:25 GMT]]></title><description><![CDATA[<p>Danke für die Antworten.</p>
<p>Nun, aufrufen kann ich die Funktion, aber es kommt etwas falsches bei raus...</p>
<p>sie sieht so aus</p>
<pre><code>Die Funktionsdeklaration im Header...
size_t funk(void const *src, size_t srcSize, char *dest, size_t destLen);

Mein Code (Ausschnitt...)
1) int src[5];
2) int *src=(int*)malloc(5*sizeof(int));

size_t size = funk(&amp;(src[0]), sizeof(src), param1, param2);
</code></pre>
<p>mit 1) funktioniert es, mit 2) nicht.<br />
2) funktioniert noch nicht einmal, wenn ich einen festen Wert, wie oben die 5, eingebe.<br />
Die 5 in 2) soll dann natürlich dann die Variable sein, die zur Kompelierzeit noch nicht definiert ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329490</guid><dc:creator><![CDATA[mHochbach]]></dc:creator><pubDate>Fri, 20 Jul 2007 20:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 20:33:14 GMT]]></title><description><![CDATA[<p>Du weißt schon, dass sizeof(int*) immer 4/8 ist?<br />
Du musst bei dem 2. parameter die größe, die du als speicher angefordert hast reinschreiben(entspricht: 5*sizeof(int)).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329491</guid><dc:creator><![CDATA[Dennis123]]></dc:creator><pubDate>Fri, 20 Jul 2007 20:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Fri, 20 Jul 2007 22:37:43 GMT]]></title><description><![CDATA[<p>Du kannst in C++ meist alloca verwenden um die nicht vorhandenen C99-style variable-length-arrays zu ersetzen:</p>
<pre><code class="language-cpp">void f(int* p, unsigned length)
{
    int* p2 = static_cast&lt;int*&gt;(alloca(sizeof(int) * length));
    // p2 verwenden
    // ...

} // &lt;- hier &quot;verschwindet&quot; der von alloca angeforderte Speicher automatisch
</code></pre>
<p>Natürlich solltest du alloca nicht mit &quot;Klassentypen&quot; verwenden, zumindest mit nichts was einen Destruktor hat, denn dieser wird nicht aufgerufen.<br />
Das tolle an alloca ist nicht nur dass der Speicher bei verlassen der Funktion automatisch freigegeben wird, sondern auch dass alloca verdammt schnell ist.</p>
<p>Intern passiert im übrigen genau dasselbe wie in C99 mit variable-length-arrays, d.h. der Speicher wird vom Stack genommen. Das bedeutet allerdings auch dass man nicht zuviel anfordern sollte, der Stack ist ja üblicherweise nicht sehr gross.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329547</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Jul 2007 22:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Sat, 21 Jul 2007 07:48:44 GMT]]></title><description><![CDATA[<p>was spricht gegen new?</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
bool allocate(T** data, const std::size_t size)
{
    *data = new T[size];
    return (*data);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1329607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329607</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 21 Jul 2007 07:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Sat, 21 Jul 2007 08:04:03 GMT]]></title><description><![CDATA[<p>Dass new um Faktor 1000 oder so (eher mehr) langsamer ist?<br />
Mann mann mann...</p>
<p>BTW: dann nehm' ich aber gleich std::vector bevor ich new verwende...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329610</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 21 Jul 2007 08:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Sat, 21 Jul 2007 09:06:41 GMT]]></title><description><![CDATA[<p>Dennis hat zwar die Lösung schon auf den Punkt gebracht, aber ich werde es nochmal etwas ausführlicher machen.<br />
sizeof(x) ist ein Operator, der zur Kompilezeit bestimmt, welche Größe ein Ausdruck hat.<br />
Bei Arrays gibt er die Größe des Arrays in Byte zurück, da die Größe der Arrays schon zur Kompilezeit feststeht.<br />
Dynamisch allozierte Arrays werden in C++ durch einen Zeiger auf das erste Element dargestellt. sizeof() sieht nur diesen Zeiger und bestimmt somit seine Größe in Bytes (auf 32bit Systemen 4 Byte).<br />
Also hier nochmal anschaulich:</p>
<pre><code class="language-cpp">int  source1[5];
int* source2 = new int[5];
sizeof(source1) // == 5*4 = 20 Byte;
sizeof(source2) // == 1*4 =  4 Byte;
// Jedenfalls auf meinem System
</code></pre>
<p>Deshalb sollte man bei dynamisch angelegten Arrays die Größe mitspeichern.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329625</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 21 Jul 2007 09:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Sun, 22 Jul 2007 09:47:54 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16504">@Dennis123</a>: Ich werde das morgen gleich mal testen. Hört sich aber logisch an. Werde morgen berichten, ob es funktioniert hat oder nicht.</p>
<p>Auch an alle anderen ein herzliches Dankeschön.</p>
<p>Viel Grüße Manfred</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330120</guid><dc:creator><![CDATA[mHochbach]]></dc:creator><pubDate>Sun, 22 Jul 2007 09:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ und Arrays on Tue, 24 Jul 2007 07:38:14 GMT]]></title><description><![CDATA[<p>Danke Don06 für die ausführliche Beschreibung, werde ich in Zukunft beherzigen. Hat wunderbar funktioniert.</p>
<p>Vielen Dank an alle, die hier geantwortet haben.</p>
<p>Gruß Manfred</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1331273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331273</guid><dc:creator><![CDATA[mHochbach]]></dc:creator><pubDate>Tue, 24 Jul 2007 07:38:14 GMT</pubDate></item></channel></rss>