<?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[sizeof(array) &#x2F; sizeof(array[0]) liefert falschen Laufindex]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>Ich habe ein array aus structs, welches ich in einer FOR Schleife durchlaufen möchte. Ich habe bisher immer folgende Methode verwendet:</p>
<pre><code class="language-cpp">for (int i = 0; i&lt;sizeof(array)/sizeof(array[0]); i++) {irgendwas machen}
</code></pre>
<p>Nun liefert mir jedoch &quot;sizeof(array)/sizeof(array[0])&quot; immer eine 0 zurück, so dass die FOR Schleife nicht betreten wird.</p>
<p>Das zum array gehörende Struct sieht so aus:</p>
<pre><code class="language-cpp">struct event{
  string name;
  int priority;
  string plc_ioaddress_1;
  string plc_ioaddress_2;
  char edge_ind;
  bool ctrl;
  bool shrd;
};
</code></pre>
<p>Das array habe ich so befüllt:</p>
<pre><code class="language-cpp">event *events1 = new event[8];

  events1[0].name = &quot;CB1_r&quot;;
  events1[0].priority = 200;
  events1[0].plc_ioaddress_1 = &quot;A10.6&quot;;
  events1[0].plc_ioaddress_2 = &quot;&quot;;
  events1[0].edge_ind = '+';
  events1[0].ctrl = 1;
  events1[0].shrd = 0;

  events1[1].name = &quot;CB1_l&quot;;
  events1[1].priority = 200;
  events1[1].plc_ioaddress_1 = &quot;A11.0&quot;;
  events1[1].plc_ioaddress_2 = &quot;&quot;;
  events1[1].edge_ind = '+';
  events1[1].ctrl = 1;
  events1[1].shrd = 0;

  ...
</code></pre>
<p>Diese FOR Schleife wird leider nie betreten. Erst wenn ich als Abbruchbedingung &quot;i&lt;8&quot; angebe, geht es.</p>
<pre><code class="language-cpp">for (int i = 0; i&lt;sizeof(events1)/sizeof(events1[0]); i++) {
    std::cout &lt;&lt; &quot;Hallo\n&quot;;
  }
</code></pre>
<p>Nach ein wenig Fehlersucherei mit std::cout habe ich festgestellt, dass <strong>sizeof(events1) = 4</strong> und <strong>sizeof(events1[0]) = 20</strong> ist!<br />
Woran könnte das liegen und wie bekomme ich für diese Art von array einen richtigen Laufindex?</p>
<p>MFG,<br />
Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291879/sizeof-array-sizeof-array-0-liefert-falschen-laufindex</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 13:03:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291879.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Aug 2011 10:02:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sizeof(array) &#x2F; sizeof(array[0]) liefert falschen Laufindex on Mon, 29 Aug 2011 10:02:25 GMT]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>Ich habe ein array aus structs, welches ich in einer FOR Schleife durchlaufen möchte. Ich habe bisher immer folgende Methode verwendet:</p>
<pre><code class="language-cpp">for (int i = 0; i&lt;sizeof(array)/sizeof(array[0]); i++) {irgendwas machen}
</code></pre>
<p>Nun liefert mir jedoch &quot;sizeof(array)/sizeof(array[0])&quot; immer eine 0 zurück, so dass die FOR Schleife nicht betreten wird.</p>
<p>Das zum array gehörende Struct sieht so aus:</p>
<pre><code class="language-cpp">struct event{
  string name;
  int priority;
  string plc_ioaddress_1;
  string plc_ioaddress_2;
  char edge_ind;
  bool ctrl;
  bool shrd;
};
</code></pre>
<p>Das array habe ich so befüllt:</p>
<pre><code class="language-cpp">event *events1 = new event[8];

  events1[0].name = &quot;CB1_r&quot;;
  events1[0].priority = 200;
  events1[0].plc_ioaddress_1 = &quot;A10.6&quot;;
  events1[0].plc_ioaddress_2 = &quot;&quot;;
  events1[0].edge_ind = '+';
  events1[0].ctrl = 1;
  events1[0].shrd = 0;

  events1[1].name = &quot;CB1_l&quot;;
  events1[1].priority = 200;
  events1[1].plc_ioaddress_1 = &quot;A11.0&quot;;
  events1[1].plc_ioaddress_2 = &quot;&quot;;
  events1[1].edge_ind = '+';
  events1[1].ctrl = 1;
  events1[1].shrd = 0;

  ...
</code></pre>
<p>Diese FOR Schleife wird leider nie betreten. Erst wenn ich als Abbruchbedingung &quot;i&lt;8&quot; angebe, geht es.</p>
<pre><code class="language-cpp">for (int i = 0; i&lt;sizeof(events1)/sizeof(events1[0]); i++) {
    std::cout &lt;&lt; &quot;Hallo\n&quot;;
  }
</code></pre>
<p>Nach ein wenig Fehlersucherei mit std::cout habe ich festgestellt, dass <strong>sizeof(events1) = 4</strong> und <strong>sizeof(events1[0]) = 20</strong> ist!<br />
Woran könnte das liegen und wie bekomme ich für diese Art von array einen richtigen Laufindex?</p>
<p>MFG,<br />
Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111945</guid><dc:creator><![CDATA[FrankTheTank87]]></dc:creator><pubDate>Mon, 29 Aug 2011 10:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof(array) &#x2F; sizeof(array[0]) liefert falschen Laufindex on Mon, 29 Aug 2011 10:06:46 GMT]]></title><description><![CDATA[<p>Diese sizeof()-Konstruktion funktioniert nur, wenn du ein <em>echtes</em> Array hast (d.h. wenn es per <code>irgendwas array[n];</code> definiert wurde). Bei dynamisch angefordertem Speicher liefert &quot;sizeof(array)&quot; nur die Größe eines Zeigers (also idR 4).</p>
<p>PS: Was spricht eigentlich gegen STL-Container?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111949</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Aug 2011 10:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof(array) &#x2F; sizeof(array[0]) liefert falschen Laufindex on Mon, 29 Aug 2011 10:18:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Diese sizeof()-Konstruktion funktioniert nur, wenn du ein echtes Array hast (d.h. wenn es per irgendwas array[n]; definiert wurde).</p>
</blockquote>
<p>Achso! Das war mir nicht bewusst. Das löst mein Problem, danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<blockquote>
<p>PS: Was spricht eigentlich gegen STL-Container?</p>
</blockquote>
<p>Eigentlich nichts. Die Größe dieses &quot;event arrays&quot; ist bekannt und jedes einzelne Element muss vom Benutzer sowieso explizit eingetippt werden. Da war das (in meinen Augen) naheliegendste ein simples array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111955</guid><dc:creator><![CDATA[FrankTheTank87]]></dc:creator><pubDate>Mon, 29 Aug 2011 10:18:21 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof(array) &#x2F; sizeof(array[0]) liefert falschen Laufindex on Mon, 29 Aug 2011 12:54:36 GMT]]></title><description><![CDATA[<p>FrankTheTank87 schrieb:</p>
<blockquote>
<blockquote>
<p>PS: Was spricht eigentlich gegen STL-Container?</p>
</blockquote>
<p>Eigentlich nichts. Die Größe dieses &quot;event arrays&quot; ist bekannt und jedes einzelne Element muss vom Benutzer sowieso explizit eingetippt werden. Da war das (in meinen Augen) naheliegendste ein simples array.</p>
</blockquote>
<p>Wenn die Größe bekannt ist, hast du erst recht keinen Grund den Speicher per new anzufordern. Ansonsten sollte ich eventuell erwähnen, daß der sizeof-Trick auch dann schiefgeht, wenn du das Array als Parameter herumreichst (die Deklarationen <code>void foo(int* p)</code> und <code>void foo(int p[])</code> sind identisch - und in der Funktion kann der Compiler die Array-Größe nicht feststellen). Btw, im neuen Standard C++0x gibt es auch einen Container mit konstanter Größe (std::array&lt;&gt;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112059</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Aug 2011 12:54:36 GMT</pubDate></item></channel></rss>