<?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[Pointer rumgereicht und dann gelöscht]]></title><description><![CDATA[<p>Ich kann doch einen Pointer auf ein Objekt in der Gegend &quot;rumreichen&quot; (auch zwischen Klassen) und später aber immer delete aufrufen, ohne Angst haben zu müssen, Speicherlöcher zu erzeugen. Oder?</p>
<pre><code class="language-cpp">void function()
{
    Objekt_A* derPointer = new Objekt_A();
    loesche(derPointer);
    derPointer = NULL;
    // Speicher sauber, oder?
}

...

void loesche(Objekt_A* temp)
{
    delete temp;
    temp = NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/134597/pointer-rumgereicht-und-dann-gelöscht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 17:30:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134597.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Jan 2006 10:46:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer rumgereicht und dann gelöscht on Fri, 27 Jan 2006 10:46:07 GMT]]></title><description><![CDATA[<p>Ich kann doch einen Pointer auf ein Objekt in der Gegend &quot;rumreichen&quot; (auch zwischen Klassen) und später aber immer delete aufrufen, ohne Angst haben zu müssen, Speicherlöcher zu erzeugen. Oder?</p>
<pre><code class="language-cpp">void function()
{
    Objekt_A* derPointer = new Objekt_A();
    loesche(derPointer);
    derPointer = NULL;
    // Speicher sauber, oder?
}

...

void loesche(Objekt_A* temp)
{
    delete temp;
    temp = NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/977712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977712</guid><dc:creator><![CDATA[NullAhnung]]></dc:creator><pubDate>Fri, 27 Jan 2006 10:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer rumgereicht und dann gelöscht on Fri, 27 Jan 2006 11:03:15 GMT]]></title><description><![CDATA[<p>Richtig.</p>
<p>Speicherlöcher entstehen, wenn du bei dem ganzen Rumgereiche vergisst, den Speicher wieder freizugeben.</p>
<p>Deshalb ist es empfehlenswert, die Verantwortlichkeit für die Freigabe dem auzuerlegen, der den Speicher reservierte.<br />
Also demselben Objekt (Kon/Destructor) oder wenigstens möglichst nahe im Quelltext.</p>
<p>Das</p>
<pre><code class="language-cpp">temp=NULL
</code></pre>
<p>in der lösche Function bringt übrigens nix, denn die temp ist nur lokal in der Funktion vorhanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977732</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Jan 2006 11:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer rumgereicht und dann gelöscht on Sat, 28 Jan 2006 12:41:39 GMT]]></title><description><![CDATA[<p>Nur warum kann man nach einer delete Anweisung immer noch auf die Objekte zugreifen?</p>
<p>Hier mein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;	

int main()
{
	int x;
	long *lptr = new long[10];

	for(x = 0; x &lt; 10; ++x)
		lptr[x] = x;

	delete[] lptr;

	for(x = 0; x &lt; 10; ++x)
		cout &lt;&lt; lptr[x] &lt;&lt; &quot;  &quot;;
	cout &lt;&lt; endl;

	for(x = 0; x &lt; 10; ++x)
		lptr[x] = x + 10;

	for(x = 0; x &lt; 10; ++x)
		cout &lt;&lt; lptr[x] &lt;&lt; &quot;  &quot;;
	cout &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Bei mir erfolgt die ausgasbe:<br />
0 1 2 3 4 5 6 7 8 9<br />
10 11 12 13 14 15 16 17 18 19</p>
<p>Doch das dürfte doch eigentlich gar nicht sein oder? Denn der Speicher wurde doch schon vorher wieder freigegeben. Aber trotzdem ist es möglich den Speicherbereich zu lesen und sogar zu beschreiben. Ich bin jetzt doch etwas verwirrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978821</guid><dc:creator><![CDATA[Linuxpower]]></dc:creator><pubDate>Sat, 28 Jan 2006 12:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer rumgereicht und dann gelöscht on Sat, 28 Jan 2006 13:08:29 GMT]]></title><description><![CDATA[<p>Das nennt sich undefiniertes Verhalten. Es kann sein das der Speicher an der Adresse noch nicht überschrieben wurde und du kannst deshalb noch drauf zugreifen. Nur du kannst dich nicht drauf verlassen das es immer und überall ( auf allen Systemen ) so ist. ( Edit: Bzw kann das natürlich auch von Programmausführung zu Programmausführung anders sein )</p>
<p>BR<br />
evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978840</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 28 Jan 2006 13:08:29 GMT</pubDate></item></channel></rss>