<?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[Ausgabe eines dynamischen Feldes liefert falsche Werte]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht mehr... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe folgendes Problem:<br />
Im Konstruktor einer Klasse initialisiere ich ein dynamisches Feld mit absteigenden Werten (Die &quot;Hilfs-&quot;ausgabe liefert auch die korrekten Werte).<br />
In einer weiteren Funktion sollen lediglich alle Werte am Bildschirm ausgegeben werden. Da tauchen auf einmal völlig andere Werte auf, als wenn ich auf Elemente außerhalb des Feldes zugreifen würde. Allerdings sehe ich meinen Fehler nicht und wenn ich meinen Code debugge, stehen immer die korrekten Werte in dem Feldern.<br />
Noch dazu kommt, dass es nicht bei jeder Ausgabe generell falsch ist... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Mein Code sieht wie folgt aus:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class turm{
    public:
        turm(int x);
        int hoehe;
        int* scheiben;
        void druck();
        ~turm();
};
turm::turm(int x){
    scheiben = new int;
    hoehe = x;

    for (int i=0; i&lt;hoehe; i++){
        *(scheiben+i) = hoehe-i;
        cout&lt;&lt;*(scheiben+i)&lt;&lt;endl;
    }
}
void turm::druck(){
    cout&lt;&lt;&quot;Der Turm ist wie folgt aufgebaut:&quot;&lt;&lt;endl;
    for (int i=hoehe; i&gt;0; i--){
        cout&lt;&lt;&quot;Auf &quot;&lt;&lt;i&lt;&lt;&quot;. Hoehe liegt Scheibe &quot;&lt;&lt;*(scheiben+(i-1))&lt;&lt;endl;
    }
    cout&lt;&lt;endl;
}
turm::~turm(){
    scheiben = NULL;
}

int main()
{
    int anz = 4;

    turm start(anz);
    turm hilf(anz);
    turm ende(anz);

    start.druck();
    hilf.druck();
    ende.druck();

    start.~turm();
    ende.~turm();
    hilf.~turm();
    return 0;
}
</code></pre>
<p>Bsp. einer Ausgabe:<br />
4<br />
3<br />
2<br />
1<br />
4<br />
3<br />
2<br />
1<br />
4<br />
3<br />
2<br />
1<br />
Der Turm ist wie folgt aufgebaut:<br />
Auf 4. Hoehe liegt Scheibe 1<br />
Auf 3. Hoehe liegt Scheibe 2<br />
Auf 2. Hoehe liegt Scheibe 3<br />
Auf 1. Hoehe liegt Scheibe 4</p>
<p>Der Turm ist wie folgt aufgebaut:<br />
Auf 4. Hoehe liegt Scheibe 201326593<br />
Auf 3. Hoehe liegt Scheibe 2046082959<br />
Auf 2. Hoehe liegt Scheibe 3<br />
Auf 1. Hoehe liegt Scheibe 4</p>
<p>Der Turm ist wie folgt aufgebaut:<br />
Auf 4. Hoehe liegt Scheibe 1<br />
Auf 3. Hoehe liegt Scheibe 2<br />
Auf 2. Hoehe liegt Scheibe 3<br />
Auf 1. Hoehe liegt Scheibe 4</p>
<p>Schon mal vielen Dank für eure Antworten!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313051/ausgabe-eines-dynamischen-feldes-liefert-falsche-werte</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 11:01:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313051.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Jan 2013 16:21:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ausgabe eines dynamischen Feldes liefert falsche Werte on Sun, 20 Jan 2013 16:21:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht mehr... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe folgendes Problem:<br />
Im Konstruktor einer Klasse initialisiere ich ein dynamisches Feld mit absteigenden Werten (Die &quot;Hilfs-&quot;ausgabe liefert auch die korrekten Werte).<br />
In einer weiteren Funktion sollen lediglich alle Werte am Bildschirm ausgegeben werden. Da tauchen auf einmal völlig andere Werte auf, als wenn ich auf Elemente außerhalb des Feldes zugreifen würde. Allerdings sehe ich meinen Fehler nicht und wenn ich meinen Code debugge, stehen immer die korrekten Werte in dem Feldern.<br />
Noch dazu kommt, dass es nicht bei jeder Ausgabe generell falsch ist... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Mein Code sieht wie folgt aus:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class turm{
    public:
        turm(int x);
        int hoehe;
        int* scheiben;
        void druck();
        ~turm();
};
turm::turm(int x){
    scheiben = new int;
    hoehe = x;

    for (int i=0; i&lt;hoehe; i++){
        *(scheiben+i) = hoehe-i;
        cout&lt;&lt;*(scheiben+i)&lt;&lt;endl;
    }
}
void turm::druck(){
    cout&lt;&lt;&quot;Der Turm ist wie folgt aufgebaut:&quot;&lt;&lt;endl;
    for (int i=hoehe; i&gt;0; i--){
        cout&lt;&lt;&quot;Auf &quot;&lt;&lt;i&lt;&lt;&quot;. Hoehe liegt Scheibe &quot;&lt;&lt;*(scheiben+(i-1))&lt;&lt;endl;
    }
    cout&lt;&lt;endl;
}
turm::~turm(){
    scheiben = NULL;
}

int main()
{
    int anz = 4;

    turm start(anz);
    turm hilf(anz);
    turm ende(anz);

    start.druck();
    hilf.druck();
    ende.druck();

    start.~turm();
    ende.~turm();
    hilf.~turm();
    return 0;
}
</code></pre>
<p>Bsp. einer Ausgabe:<br />
4<br />
3<br />
2<br />
1<br />
4<br />
3<br />
2<br />
1<br />
4<br />
3<br />
2<br />
1<br />
Der Turm ist wie folgt aufgebaut:<br />
Auf 4. Hoehe liegt Scheibe 1<br />
Auf 3. Hoehe liegt Scheibe 2<br />
Auf 2. Hoehe liegt Scheibe 3<br />
Auf 1. Hoehe liegt Scheibe 4</p>
<p>Der Turm ist wie folgt aufgebaut:<br />
Auf 4. Hoehe liegt Scheibe 201326593<br />
Auf 3. Hoehe liegt Scheibe 2046082959<br />
Auf 2. Hoehe liegt Scheibe 3<br />
Auf 1. Hoehe liegt Scheibe 4</p>
<p>Der Turm ist wie folgt aufgebaut:<br />
Auf 4. Hoehe liegt Scheibe 1<br />
Auf 3. Hoehe liegt Scheibe 2<br />
Auf 2. Hoehe liegt Scheibe 3<br />
Auf 1. Hoehe liegt Scheibe 4</p>
<p>Schon mal vielen Dank für eure Antworten!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291656</guid><dc:creator><![CDATA[Studentin]]></dc:creator><pubDate>Sun, 20 Jan 2013 16:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to Ausgabe eines dynamischen Feldes liefert falsche Werte on Sun, 20 Jan 2013 16:29:30 GMT]]></title><description><![CDATA[<p>Studentin schrieb:</p>
<blockquote>
<pre><code>scheiben = new int;
</code></pre>
</blockquote>
<p>Um wie viele Scheiben geht es noch gleich?<br />
Schon mal von std::vector gehört?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291659</guid><dc:creator><![CDATA[Captain Obvious]]></dc:creator><pubDate>Sun, 20 Jan 2013 16:29:30 GMT</pubDate></item><item><title><![CDATA[Reply to Ausgabe eines dynamischen Feldes liefert falsche Werte on Sun, 20 Jan 2013 16:30:22 GMT]]></title><description><![CDATA[<p>Ach, und</p>
<pre><code>scheiben = NULL;
</code></pre>
<p>ist auch nicht so das Wahre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291660</guid><dc:creator><![CDATA[Captain Obvious]]></dc:creator><pubDate>Sun, 20 Jan 2013 16:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ausgabe eines dynamischen Feldes liefert falsche Werte on Sun, 20 Jan 2013 16:33:01 GMT]]></title><description><![CDATA[<p>Und man soll wirklich nicht manuell den dtor aufrufen, außer man hat erstaunlich plausible Gründe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291661</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 20 Jan 2013 16:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to Ausgabe eines dynamischen Feldes liefert falsche Werte on Sun, 20 Jan 2013 16:53:32 GMT]]></title><description><![CDATA[<p>Vielen Dank für die vielen schnellen Antworten.</p>
<p>Nachdem ich das &quot;new&quot; jetzt richtig anwende, funktioniert es auch.</p>
<p>Vom std::vector hatte ich bisher noch nichts gehört, werde es aber gleich mal damit versuchen.</p>
<p>Den Destruktor habe ich nur deswegen am Ende des Programms aufgerufen, weil ich völlig verzweifelt war (und mir irgendwie klar war, dass ich bestimmt irgendwo eine &quot;Kleinigkeit&quot; vergessen hatte)</p>
<p>Außerdem habe ich den Destruktor für die bisherige Lösung jetzt mit delete[] hoffentlich verbessert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291671</guid><dc:creator><![CDATA[Studentin]]></dc:creator><pubDate>Sun, 20 Jan 2013 16:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to Ausgabe eines dynamischen Feldes liefert falsche Werte on Sun, 20 Jan 2013 17:03:23 GMT]]></title><description><![CDATA[<p>Wenn du &quot;richtig&quot; C++ machen willst, sind new[] und delete[] völlig out. std::vector ist viel, viel einfacher zu verwenden, und verhindert quasi von selbst solche Fehler wie die von dir gemachten. Manuelle Speicherverwaltung ist kaum das richtige Gebiet für Anfänger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291672</guid><dc:creator><![CDATA[Captain Obvious]]></dc:creator><pubDate>Sun, 20 Jan 2013 17:03:23 GMT</pubDate></item></channel></rss>