<?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[Länge eines Arrays]]></title><description><![CDATA[<p>Hallo,</p>
<p>Es erscheint mir recht merkwürdig dass man in C/C++ nicht auf die Länge eines Arrays zugreifen kann, wie es etwa in Java und anderen Sprachen der Fall ist. Vor allem wundere ich mich hier über dynamisch allokierte Arrays. Denn wenn man sich die Länge nicht merkt ist diese ja bekanntlich verloren. Aber sie muss ja doch noch gespeichert sein, denn wie sollte denn free() oder delete herausfinden wieviel es wieder freigeben muss? Gibt es eine Standardfunktion um an diese Information zu gelangen? Oder wird dies rein aus Geschwindigkeitsgründen nicht so gemacht?</p>
<p>mfG<br />
tobain</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/146137/länge-eines-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 14:13:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/146137.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 May 2006 14:28:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 14:28:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Es erscheint mir recht merkwürdig dass man in C/C++ nicht auf die Länge eines Arrays zugreifen kann, wie es etwa in Java und anderen Sprachen der Fall ist. Vor allem wundere ich mich hier über dynamisch allokierte Arrays. Denn wenn man sich die Länge nicht merkt ist diese ja bekanntlich verloren. Aber sie muss ja doch noch gespeichert sein, denn wie sollte denn free() oder delete herausfinden wieviel es wieder freigeben muss? Gibt es eine Standardfunktion um an diese Information zu gelangen? Oder wird dies rein aus Geschwindigkeitsgründen nicht so gemacht?</p>
<p>mfG<br />
tobain</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050932</guid><dc:creator><![CDATA[tobain]]></dc:creator><pubDate>Thu, 04 May 2006 14:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 14:32:26 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Wenn du std::vector benutzt, kannst du mit size() auf die Größe des Arrays und capacity auf die Größe des Speichers zugreifen.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050934</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 May 2006 14:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 14:38:03 GMT]]></title><description><![CDATA[<p>Danke aber das wusste ich bereits <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="😃"
    /><br />
Ich dachte dabei an folgendes Konstrukt:</p>
<pre><code class="language-cpp">int* ar = new int[anzahl];
...
int len = length(ar);
</code></pre>
<p>Wobei length() hier nur symbolisch für das stehen soll, was ich oben beschrieben hab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050937</guid><dc:creator><![CDATA[tobain]]></dc:creator><pubDate>Thu, 04 May 2006 14:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 14:46:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Gibt es einen Grund, dass noch si zu machen, wenn es std::vector gibt?</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050946</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 04 May 2006 14:46:49 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 14:58:13 GMT]]></title><description><![CDATA[<p>Nein, es gibt eigentlich nicht viel Sinn. Es ist halt nur Interesse. Und in C würde das wieder Sinn machen, da es ja die STL nicht gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050954</guid><dc:creator><![CDATA[tobain]]></dc:creator><pubDate>Thu, 04 May 2006 14:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:08:14 GMT]]></title><description><![CDATA[<p>Es gibt keine Standardfunktion um die Länge eines Arrays zu bestimmen von dem nur ein Zeiger auf das erste Element vorhanden ist.</p>
<p>(Wenn Du die Länge weisst um zu allokieren - ganz einfache Lösung: Merke sie Dir)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050960</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 04 May 2006 15:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:09:23 GMT]]></title><description><![CDATA[<p>DU kannst sizeof verwenden.</p>
<p>Aber Achtung sizeof zählt die Anzahl der belegten bytes im Speicher. Also sollte</p>
<pre><code class="language-cpp">int tmp[265];
int len = sizeof(tmp);
</code></pre>
<p>len 1024 ergeben, da jedes int element im Speicher 4 Bytes belegt.<br />
Besser wäre das:</p>
<pre><code class="language-cpp">int tmp[265]
int len = sizeof(tmp)/sizeof(int);
</code></pre>
<p>Das sollte genau 256 ergeben.<br />
Das zweite sizeof ist nur, falls du nicht weißt wie viele Bytes ein Objekt im Speicher belegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050962</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Thu, 04 May 2006 15:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:13:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11561">@SALOMON</a>:<br />
Bringt bei o.a. Beispiel mit new nur überhaupt nix <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/1050965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050965</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 04 May 2006 15:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:29:29 GMT]]></title><description><![CDATA[<p>Ja du hast recht.<br />
Habe gerade auch ein wenig rumprobiert, aber scheinbar ist das nur schwer möglich?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050979</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Thu, 04 May 2006 15:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:32:57 GMT]]></title><description><![CDATA[<p>Was ist schwer möglich?!</p>
<p>Sizeof() liefert die Länge in Bytes - bei einem Array ist das die Länge des Array multipliziert mit der Länge eines Elements, bei einem Zeiger auf das erste Element eines Arrays ist es die Länge eines Zeigers auf der betreffenden Plattform.</p>
<pre><code class="language-cpp">int ary[100];
int *bry = ary;

sizeof(ary); // auf x86 400 Bytes
sizeof(bry); // auf x86 4 Bytes
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1050982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050982</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 04 May 2006 15:32:57 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:37:53 GMT]]></title><description><![CDATA[<p>Ja das ist mir schon klar. Ich meinte, dass man einen Zeiger mit new initialisiert und dann die Arraygröße bestimmen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050985</guid><dc:creator><![CDATA[SALOMON]]></dc:creator><pubDate>Thu, 04 May 2006 15:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 15:38:57 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, dass es dem Compiler überlassen ist, wie er das handhabt. Z.B. könnte er die Länge an void* (ptr) - 1 speichern. Damit würde ichs mal probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050986</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 04 May 2006 15:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 16:36:39 GMT]]></title><description><![CDATA[<p>Mich wundert es nur, dass es eben keine solche Funktion zu geben scheint, obwohl sich die Implementierung des Speicherverwaltung ja sehr wohl die Länge des allokierten Arrays merken muss. Könnte mir höchstens vorstellen das die Speicherverwaltung in Blöcken zu ,sagen wir mal 256 Bytes, organisiert ist. Wenn man ein Array der Länge 20 Bytes allokiert, dann kann es also durchaus sein das trotzdem intern 256 Bytes allokiert werden. Somit fehlt die Information über die eigentliche Größe.<br />
(Das ist mir die einzigste Erklärung und vlt. habe ich mir damit die Frage selbst beantwortet) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1051012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1051012</guid><dc:creator><![CDATA[tobain]]></dc:creator><pubDate>Thu, 04 May 2006 16:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to Länge eines Arrays on Thu, 04 May 2006 18:23:35 GMT]]></title><description><![CDATA[<p>Eine solche Funktion hätte aber rein garnichts mit der Länge des Arrays zu tun. Sie würde Dir nur verraten, wie lang ein allokierter Block ist, und das auch nur wenn Du dieser Funktion den Anfang des Blocks übergibst.</p>
<p>In der aktuellen c't gibt es einen Artikel über Heap-Overflows, dort wird eine sehr einfache Heap-Struktur beispielhaft skizziert. Würde man diese zugrunde legen, wäre es schon nicht mehr möglich zuverlässig zu sagen ob ein solcher Block an den Anfang eines allokierten Bereichs zeigt. Tut er das nämlich nicht, würde eine Längenermittlung Müll liefern, also undefinierte Werte.</p>
<p>Einfaches Beispiel (ok, in C++ wohl nicht so üblich, in C aber schon verbreitet)</p>
<pre><code class="language-cpp">typedef struct {
  int a, b;
  char *c;
} bla;

bla *x = malloc(sizeof(bla) + 100);
x-&gt;c = x + 1;
strcpy(x-&gt;c, &quot;LordJaxom&quot;);
</code></pre>
<p>Wie sollte die Speicherwervaltung nun die Länge von bla::c ermitteln, wenn sie nicht weiss dass der Speicher mittendrin im allokierten Block liegt?</p>
<p>Ich meine die Sprache bietet sowas aus gutem Grund nicht an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1051068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1051068</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 04 May 2006 18:23:35 GMT</pubDate></item></channel></rss>