<?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öschen von einem dynamischen Array]]></title><description><![CDATA[<p>Hallo,</p>
<p>kleine Frage zu meinem beispiel code</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int anzahl;
double *messwerte = new double [anzahl];

void print()
{
    for (int i= 0; i &lt; anzahl; i++)
        cout &lt;&lt; messwerte[i] &lt;&lt; &quot; &quot;;
}
int main()
{
    cout &lt;&lt; &quot;Anzahl der Messwerte eingeben:&quot;;
    cin &gt;&gt; anzahl;
    for (int i = 0; i &lt; anzahl; i++)
    {
        cout &lt;&lt; &quot;Naechsten Messwert eingeben: &quot;;
        cin &gt;&gt; messwerte[i];
    }
    print();
    delete[]messwerte;
    cout &lt;&lt; endl;
    print();
    system(&quot;PAUSE&quot;);
    return (0);
}
</code></pre>
<p>warum werden hier die messerwerte nicht mit dem &quot;delete[]messwerte&quot; gelöscht?<br />
Ist fuer mich unerklärlich. <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>Freu mich auf eure Antworten.</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244044/löschen-von-einem-dynamischen-array</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 14:41:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244044.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jun 2009 13:24:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 13:24:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kleine Frage zu meinem beispiel code</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int anzahl;
double *messwerte = new double [anzahl];

void print()
{
    for (int i= 0; i &lt; anzahl; i++)
        cout &lt;&lt; messwerte[i] &lt;&lt; &quot; &quot;;
}
int main()
{
    cout &lt;&lt; &quot;Anzahl der Messwerte eingeben:&quot;;
    cin &gt;&gt; anzahl;
    for (int i = 0; i &lt; anzahl; i++)
    {
        cout &lt;&lt; &quot;Naechsten Messwert eingeben: &quot;;
        cin &gt;&gt; messwerte[i];
    }
    print();
    delete[]messwerte;
    cout &lt;&lt; endl;
    print();
    system(&quot;PAUSE&quot;);
    return (0);
}
</code></pre>
<p>warum werden hier die messerwerte nicht mit dem &quot;delete[]messwerte&quot; gelöscht?<br />
Ist fuer mich unerklärlich. <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>Freu mich auf eure Antworten.</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732128</guid><dc:creator><![CDATA[pampy]]></dc:creator><pubDate>Wed, 24 Jun 2009 13:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 13:26:05 GMT]]></title><description><![CDATA[<p>Woran erkennst du, dass sie nicht gelöscht werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732129</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Wed, 24 Jun 2009 13:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 13:34:03 GMT]]></title><description><![CDATA[<p>Werden sie. Die Frage ist eher: Warum stuerzt dein Programm nicht ab? Ich sage einfach mal undefiniertes Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732134</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 24 Jun 2009 13:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 13:43:45 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Woran erkennst du, dass sie nicht gelöscht werden?</p>
</blockquote>
<p>mit den der Konsolenausgabe</p>
<p>-------</p>
<p>wie ist die Lösung dieses Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732138</guid><dc:creator><![CDATA[pampy]]></dc:creator><pubDate>Wed, 24 Jun 2009 13:43:45 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 13:49:13 GMT]]></title><description><![CDATA[<p>pampy schrieb:</p>
<blockquote>
<p>Tippgeber schrieb:</p>
<blockquote>
<p>Woran erkennst du, dass sie nicht gelöscht werden?</p>
</blockquote>
<p>mit den der Konsolenausgabe</p>
<p>-------</p>
<p>wie ist die Lösung dieses Problem?</p>
</blockquote>
<p>Es gibt kein Problem, abgesehen davon, dass du nach dem delete[] auf Speicher zugreifst der dir nicht mehr gehört. Wenn du dein Programm mit Debug-Informationen kompilierst, dann wird der Speicher je nach Compiler (und Einstellungen) beim Freigeben mit einem Muster wie 0xCDCDCDCD überschrieben, so kannst du leicht(er) erkennen wenn du auf ungültige Speicherbereiche zugreifst.<br />
Mit einem Programm wie valgrind solltest du sowas übrigens auch leicht feststellen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732140</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Wed, 24 Jun 2009 13:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 14:07:46 GMT]]></title><description><![CDATA[<p>Du darfst auf einen Speicherbereich nicht mehr zugreifen, nachdem du ihn mit delete freigegeben hast. Was passiert, wenn du es trotzdem versuchst, ist einfach undefiniert, wie schon gesagt wurde.<br />
Betriebssysteme teilen den Speicher in Seiten auf, die z.B. eine Größe von 4 KB haben. Programme bekommen Speicher nur seitenweise zugeteilt. Der Effizienz wegen versucht man, mehrere kleine Objekte in eine Seite zu bekommen. Auch wenn du eines oder mehrere der Objekte in einer Seite wieder freigibst, kann die gesamte Seite erst wieder freigegeben werden, wenn auch das letzte Objekt in ihr freigegeben wurde. Was dann auch erklärt, warum du manchmal auf eigentlich schon gelöschte Objekte noch zugreifen kannst.</p>
<pre><code class="language-cpp">const int n=10000000;
const int s=100;
int** m=new int*[n];
for (int i=0;i&lt;n;i++)m[i]=new int;
for (int i=0;i&lt;n;i++)if (i%s!=0)delete m[i];
delete[] m;
</code></pre>
<p>Das Beispiel verdeutlicht das noch ein wenig. Eigentlich werden 99% der 10 Millionen ints wieder freigegeben, trotzdem dürfte durch die Freigabe der Speicherverbrauch in den meisten Umgebungen nicht oder kaum sinken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732159</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Wed, 24 Jun 2009 14:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 14:11:04 GMT]]></title><description><![CDATA[<p>pampy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int anzahl;
double *messwerte = new double [anzahl];
</code></pre>
</blockquote>
<p>Folgendes passiert hier:</p>
<ul>
<li><code>anzahl</code> und <code>messwerte</code> werden statisch mit 0 initialisiert.</li>
<li><code>messwerte</code> wird dynamisch mit <code>new double[anzahl]</code> initialisiert.<br />
- Die Ausführung von main startet und arbeitet auf einem Array mit 0 Elementen</li>
</ul>
<p>&quot;statisch initialisieren&quot; == Initialisierung bevor überhaupt <em>irgend etwas</em> ausgeführt wird. Die Nullen sind schon da, kurz nachdem das Programm in den Speicher geladen wurde.</p>
<p>&quot;dynamisch initialisieren&quot; == Initialisierung beim Programmstart <em>nach</em> statischer Initialisierung und <em>vor</em> Ausführung von main.</p>
<blockquote>
<pre><code class="language-cpp">void print()
{
    for (int i= 0; i &lt; anzahl; i++)
        cout &lt;&lt; messwerte[i] &lt;&lt; &quot; &quot;;
</code></pre>
</blockquote>
<p>Undefiniertes verhalten wenn Du <code>print()</code> aufrufst und <code>anzahl&gt;0</code> gilt. (Lesezugriff hinter dem reservierten Speicher)</p>
<blockquote>
<pre><code class="language-cpp">}
int main()
{
    cout &lt;&lt; &quot;Anzahl der Messwerte eingeben:&quot;;
    cin &gt;&gt; anzahl;
    for (int i = 0; i &lt; anzahl; i++)
    {
        cout &lt;&lt; &quot;Naechsten Messwert eingeben: &quot;;
        cin &gt;&gt; messwerte[i];
</code></pre>
</blockquote>
<p>Undefiniertes Verhalten wenn <code>anzahl&gt;0</code> . (Lesezugriff hinter dem reservierten Speicher -&gt; buffer overflow)</p>
<blockquote>
<p>warum werden hier die messerwerte nicht mit dem &quot;delete[]messwerte&quot; gelöscht?<br />
Ist fuer mich unerklärlich. <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>
</blockquote>
<p>Wie stellst Du das denn fest, dass sie nicht gelöscht werden?</p>
<p>Verbesserungstipp: Schmeiss <code>anzahl</code> und <code>messwerte</code> als &quot;globale&quot; Variablen aus Deinem Programm und nutze einen <code>std::vector&lt;double&gt;</code> innerhalb Deiner main Funktion.</p>
<pre><code class="language-cpp">int main() {
    int anzahl = 0;
    ....
    std::vector&lt;double&gt; messwerte;
    for (int i=0; i&lt;anzahl; ++i) {
      double gelesen = ....;
      messwerte.push_back(gelesen);
    }
    ....
  }
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732161</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 24 Jun 2009 14:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 14:16:19 GMT]]></title><description><![CDATA[<p>danke fuer deine Antwort.</p>
<p>Ist das nur in C++ so ? Hat es dann nicht etwas mit &quot;garbage collector&quot; zu tun, den Java hat?</p>
<p>valgrind nur fuer linux?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732170</guid><dc:creator><![CDATA[pampy]]></dc:creator><pubDate>Wed, 24 Jun 2009 14:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 15:13:43 GMT]]></title><description><![CDATA[<p>pampy schrieb:</p>
<blockquote>
<p>Ist das nur in C++ so ?</p>
</blockquote>
<p>Nein.</p>
<blockquote>
<p>Hat es dann nicht etwas mit &quot;garbage collector&quot; zu tun, den Java hat?</p>
</blockquote>
<p>Nur entfernt.</p>
<blockquote>
<p>valgrind nur fuer linux?</p>
</blockquote>
<p>Für alle Unix-artigen Systeme, Windows zählt aber nicht dazu. Eine Alternative für Windows kenne ich nicht, aber irgendwas wird es da bestimmt geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732216</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 24 Jun 2009 15:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Löschen von einem dynamischen Array on Wed, 24 Jun 2009 15:42:46 GMT]]></title><description><![CDATA[<p>pampy schrieb:</p>
<blockquote>
<p>Ist das nur in C++ so ?</p>
</blockquote>
<p>Was genau?</p>
<p>pampy schrieb:</p>
<blockquote>
<p>Hat es dann nicht etwas mit &quot;garbage collector&quot; zu tun, den Java hat?</p>
</blockquote>
<p>Ich weiß nicht, was Du meinst. Wie kommst Du denn darauf?</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732236</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 24 Jun 2009 15:42:46 GMT</pubDate></item></channel></rss>