<?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[delete]]></title><description><![CDATA[<p>Wenn ich Variablen, also keine Zeiger anlege, z.B.<br />
int a;<br />
Kann ich diese dann auch mit<br />
delete a;<br />
löschen?<br />
Bzw. ist das nötig um den Speicherplatz wieder freizugeben?<br />
Und wenn man Variablen in Funktionen anlegt, werden diese am Ende der Funktion dann selbstständig gelöscht?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168088/delete</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 07:46:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168088.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Dec 2006 15:20:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 15:20:04 GMT]]></title><description><![CDATA[<p>Wenn ich Variablen, also keine Zeiger anlege, z.B.<br />
int a;<br />
Kann ich diese dann auch mit<br />
delete a;<br />
löschen?<br />
Bzw. ist das nötig um den Speicherplatz wieder freizugeben?<br />
Und wenn man Variablen in Funktionen anlegt, werden diese am Ende der Funktion dann selbstständig gelöscht?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194065</guid><dc:creator><![CDATA[Der Franz]]></dc:creator><pubDate>Mon, 18 Dec 2006 15:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 15:23:45 GMT]]></title><description><![CDATA[<p>Nein, nein, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194068</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 18 Dec 2006 15:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 15:24:30 GMT]]></title><description><![CDATA[<p>- EDIT: zu spät -</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194069</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 18 Dec 2006 15:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 15:35:30 GMT]]></title><description><![CDATA[<p>wenn du sowas machst wie dus beschrieben hast, wird dein Programm ziemlich sicher mit einer Zugriffsverletzung abstürzen.</p>
<p>Beispiel:</p>
<pre><code>int a = 10;
delete a;
</code></pre>
<p>Was bei der Auführung passiert, ist, dass versucht wird den Speicherblock, der an der Speicheradresse <strong>10</strong> liegt zu löschen. Da dies aber außerhalb des Speichers deines Prozesses liegt wird das das Betriebssystem nicht gut finden und das Programm beenden.</p>
<p>Das andere hat was mit der Gültigkeit und der Lebensdauer von Variablen zu tun. Variablen existieren immer innerhalb des Blocks in dem sie definiert werden</p>
<pre><code>int a = 10;

//man kann Blöcke immer und überall definieren
{
  int b = 10;
}

a = b; // -&gt; Compilerfehler
</code></pre>
<p>Das gleiche gilt für Funktionen, da diese auch einen Block öffnen und wieder schließen { }.</p>
<p>Variablen die explizit erzeugt werden (z.B. durch int, float, char...) dienen dem Compiler lediglich als Information dafür, dass er ergindwo Speicher (meist auf dem Stack) reservieren soll. Es sind also Platzhalter. Wird der Gültigkeitsbereich der Variablen verlassen, dann wird auch der Speicher wieder freigegeben.</p>
<p>Anders sieht es in diesem Fall aus:</p>
<pre><code>int* function getAnInt() {

  return new int;
}

int *pointerToInt = getAnInt();

...

delete( pointerToInt );
</code></pre>
<p>Hier muss man die Variable wieder freigeben, da der Compiler nur die Referenz (Pointervariable), nicht aber das worauf diese zeigt kennt. Gib man pointerToInt nicht wieder frei entsteht ein Memoryleak.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194076</guid><dc:creator><![CDATA[littlejohn]]></dc:creator><pubDate>Mon, 18 Dec 2006 15:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 15:39:01 GMT]]></title><description><![CDATA[<p>Also muss man dann auch Klassenvariablen nicht wieder freigeben,<br />
sonder nur Zeiger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194079</guid><dc:creator><![CDATA[Der Franz]]></dc:creator><pubDate>Mon, 18 Dec 2006 15:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 15:58:22 GMT]]></title><description><![CDATA[<p>Die Antwort ist ganz simple:</p>
<p>Alles was Du mit new angelegt hast, mußt du mit delete wieder freigeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194091</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 18 Dec 2006 15:58:22 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 16:20:43 GMT]]></title><description><![CDATA[<p>littlejohn schrieb:</p>
<blockquote>
<p>wenn du sowas machst wie dus beschrieben hast, wird dein Programm ziemlich sicher mit einer Zugriffsverletzung abstürzen.</p>
<p>Beispiel:</p>
<pre><code>int a = 10;
delete a;
</code></pre>
<p>Was bei der Auführung passiert, ist, dass versucht wird den Speicherblock, der an der Speicheradresse <strong>10</strong> liegt zu löschen. Da dies aber außerhalb des Speichers deines Prozesses liegt wird das das Betriebssystem nicht gut finden und das Programm beenden.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Das wird ziemlich sicher nicht passieren, da der Compiler so ein Programm gar nicht kompilieren dürfte. Der Comeau zum Beispiel sagt:</p>
<pre><code>error: expression must have pointer type
</code></pre>
<p>Um den von dir gewünschten Effekt zu bekommen müsste man schon etwas härter rangehen, z.B. so:</p>
<pre><code class="language-cpp">int main()
{
    int a = 10;
    delete reinterpret_cast&lt;int*&gt;(a);
}
</code></pre>
<p>Aber da so verrückt ja hoffentlich niemand ist, erübrigt sich das Problem.</p>
<p>Die Antwort auf die Frage</p>
<p>Der Franz schrieb:</p>
<blockquote>
<p>Wenn ich Variablen, also keine Zeiger anlege, z.B.<br />
int a;<br />
Kann ich diese dann auch mit<br />
delete a;<br />
löschen?</p>
</blockquote>
<p>ist also nein. Man <strong>kann</strong> Variablen so nichtmal löschen.</p>
<p>Felix :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194104</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Mon, 18 Dec 2006 16:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Mon, 18 Dec 2006 18:55:02 GMT]]></title><description><![CDATA[<p>Und STL-Container?<br />
Kann man einfach schreiben</p>
<p>std::vector&lt;Klasse1&gt; K1;</p>
<p>und der Speicher wird wieder freigegeben am Ende des Programms?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194214</guid><dc:creator><![CDATA[Der Franz]]></dc:creator><pubDate>Mon, 18 Dec 2006 18:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Tue, 19 Dec 2006 03:57:21 GMT]]></title><description><![CDATA[<p>Ja.</p>
<p>Wurde ja schon geschrieben: alles was mit new angelegt wird muss mit delete geloescht werden. Sollte doch so relativ schon das Ende der Geschichte sein, nee?</p>
<p>std::vector hat (wie jede Klasse) einen destructor, der sich um das deleten des Speichers selbst kuemmert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194421</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Tue, 19 Dec 2006 03:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Tue, 19 Dec 2006 11:24:06 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>std::vector hat (wie jede Klasse) einen destructor, der sich um das deleten des Speichers selbst kuemmert.</p>
</blockquote>
<p>Das betrifft aber nur Ressourcen, die innerhalb der Klasse verwendet werden. Das Löschen der Instanz selbst ist immer noch Teil der Implementation. Oder anders formuliert, das ist die Aufgabe des Compilers und sein Umgang mit automatischem Speicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194656</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 19 Dec 2006 11:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Wed, 20 Dec 2006 03:52:44 GMT]]></title><description><![CDATA[<p>Hmm,. ja tschuldigung falsch formuliert. Eigentlich habe ich das array gemeint, das std::vector ja wohl verwendet. Waere aber net so ganz die Antwort auf die Frage gewesen, sry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195186</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Wed, 20 Dec 2006 03:52:44 GMT</pubDate></item></channel></rss>