<?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[Problem mit Feld von Strukturen]]></title><description><![CDATA[<pre><code class="language-cpp">int main(int argc, char* argv[])
{
    struct bla
    {
        int x;
    };
    bla*     foo[50];
    foo[22]-&gt;x = 200;
}
</code></pre>
<p>Sinngemäß ist das mein Code, nun funktioniert das compilieren einwandfrei, beim Ausführen bricht es aber sofort ab.Mein Compiler gibt mir nur &quot;Process terminated with status 3&quot; zurück. Ich benutze Windows XP und Code::Blocks, mit MinGW.</p>
<p>Könnte mir bitte jemand helfen, und mir erklären was ich falsch mache :)?</p>
<p>MfG.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241368/problem-mit-feld-von-strukturen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 13:55:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241368.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2009 17:39:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 17:39:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main(int argc, char* argv[])
{
    struct bla
    {
        int x;
    };
    bla*     foo[50];
    foo[22]-&gt;x = 200;
}
</code></pre>
<p>Sinngemäß ist das mein Code, nun funktioniert das compilieren einwandfrei, beim Ausführen bricht es aber sofort ab.Mein Compiler gibt mir nur &quot;Process terminated with status 3&quot; zurück. Ich benutze Windows XP und Code::Blocks, mit MinGW.</p>
<p>Könnte mir bitte jemand helfen, und mir erklären was ich falsch mache :)?</p>
<p>MfG.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712908</guid><dc:creator><![CDATA[strukturen?]]></dc:creator><pubDate>Tue, 19 May 2009 17:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 17:46:49 GMT]]></title><description><![CDATA[<p>strukturen? schrieb:</p>
<blockquote>
<p>Könnte mir bitte jemand helfen, und mir erklären was ich falsch mache :)?</p>
</blockquote>
<p>Du erzeugst 50 Zeiger auf <code>bla</code> . Diese 50 Zeiger zeigen ins Nirvana. Jetzt nimmst du den 23. Zeiger, welcher wie alle anderen eben irgendwohin zeigt, dereferenzierst ihn und weist dem Objekt 200 zu, in einem Speicherbereich der dir nicht gehört.</p>
<p>Absolutes undefiniertes Verhalten. Deine Festplatte hätte theoretisch sogar gelöscht werden können <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>
<p>Korrekt wäre wohl hier eher das:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
    struct bla
    {
        int x;
    };
    bla foo[50]; // kein bla*
    foo[22].x = 200; // kein Zeiger, sondern Objekt, also . und nicht -&gt;
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712910</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 19 May 2009 17:46:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 17:50:47 GMT]]></title><description><![CDATA[<p>Du deklarierst einen Zeiger, der zeigt aber auf keinen Speicherbereich!<br />
Ein</p>
<pre><code class="language-cpp">bla *foo[50];
for(int i = 0; i &lt; 50; i++) {
   bla temp;
   foo[i] = new bla;
   // oder auf dem Stack ohne delete:
   foo[i] = &amp;temp;
}
foo[22]-&gt;x = 200;
delete [] foo;
</code></pre>
<p>schafft z.B. Abhilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712912</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 19 May 2009 17:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 17:54:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5255">@Ad</a> aCTa,<br />
Auch sehr schönes undefiniertes Verhalten. Du gibst automatischen Speicher frei und löschst allerdings den dynamischen Speicher nicht.<br />
Richtig wäre bei deinem Beispiel:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
    struct bla
    {
        int x;
    };
    bla* foo[50];

    for(int i = 0; i &lt; 50; i++) {
        foo[i] = new bla;
    }
    foo[22]-&gt;x = 200;

    // nicht delete[], sondern jedes einzelne Objekt.
    for(int i = 0; i &lt; 50; i++) {
        delete foo[i];
    }
}
</code></pre>
<p>Und das mit dem <code>bla temp;</code> auf dem Stack ist auch undefiniert, da das Stackobjekt bei jedem Schleifendurchlauf neu erstellt, bzw. zerstört, wird. Ausserhalb der Schleife ist kein Objekt mehr vorhanden. Also auch ein Zugriff auf Speicher, welcher dir nicht mehr gehört.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712914</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 19 May 2009 17:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 17:54:53 GMT]]></title><description><![CDATA[<p>Danke für die schnelle, gut verständliche Hilfe :).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712915</guid><dc:creator><![CDATA[strukturen]]></dc:creator><pubDate>Tue, 19 May 2009 17:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 18:16:29 GMT]]></title><description><![CDATA[<p>Da es gerade passt: Was würde bla* foo = new[] bla; gewirken?<br />
Und was bla* foo = new bla[];?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712932</guid><dc:creator><![CDATA[gleich_hinterher]]></dc:creator><pubDate>Tue, 19 May 2009 18:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Feld von Strukturen on Tue, 19 May 2009 19:29:15 GMT]]></title><description><![CDATA[<p>gleich_hinterher schrieb:</p>
<blockquote>
<p>Da es gerade passt: Was würde bla* foo = new[] bla; gewirken?<br />
Und was bla* foo = new bla[];?</p>
</blockquote>
<p>Ersteres einen Syntaxfehler.<br />
Beim zweiten bin ich mir nicht ganz sicher. Soviel ich weiss, wird da ein Feld mit der Grösse 0 angelegt, also ist die Aktion meistens sinnfrei.</p>
<p>Edit: Laut meiner Memory-Überwachungs-Klasse wird da tatsächlich <code>operator new[]</code> mit 0 Byte als Argument aufgerufen.</p>
<p>Edit 2: Jetzt wäre natürlich noch interessant zu wissen, ob man ein Memory Leak hat, wenn man diesen Speicher nicht mehr freigibt. Laut meiner Klasse ja, und zwar mit der Grösse von 0 Byte. :p<br />
Aber freigeben ist wohl sicherer. Zumal der Fall ja so oft vorkommt. <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/1712961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712961</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 19 May 2009 19:29:15 GMT</pubDate></item></channel></rss>