<?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[Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten?]]></title><description><![CDATA[<p>Hi,<br />
wenn ich das hier mache</p>
<pre><code class="language-cpp">testklasse *erster=new testklasse();
erster=new testklasse();
</code></pre>
<p>habe ich zweimal eine testklasse auf dem Arbeitsspeicher angelegt.</p>
<p>Wird die erste mit new angelegte testklasse durch irgendwelche Destruktoren während der Laufzeit des Programms zerstört?</p>
<p>Ich benutze wxwidgets und es kommt vor, dass manche Variablen in der Testklasse Zufallswerte erzeugen bzw. mein Programm abstürzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220805/zeigerzuweisung-mit-new-bleibt-der-alte-zeiger-erhalten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 17:03:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220805.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Aug 2008 12:37:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 12:37:41 GMT]]></title><description><![CDATA[<p>Hi,<br />
wenn ich das hier mache</p>
<pre><code class="language-cpp">testklasse *erster=new testklasse();
erster=new testklasse();
</code></pre>
<p>habe ich zweimal eine testklasse auf dem Arbeitsspeicher angelegt.</p>
<p>Wird die erste mit new angelegte testklasse durch irgendwelche Destruktoren während der Laufzeit des Programms zerstört?</p>
<p>Ich benutze wxwidgets und es kommt vor, dass manche Variablen in der Testklasse Zufallswerte erzeugen bzw. mein Programm abstürzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568889</guid><dc:creator><![CDATA[Big_Exception]]></dc:creator><pubDate>Thu, 21 Aug 2008 12:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 12:45:53 GMT]]></title><description><![CDATA[<p>new ohne delete =&gt; Speicherleck!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568896</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 21 Aug 2008 12:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 12:46:09 GMT]]></title><description><![CDATA[<p>Nein. Der Desktruktor wird je erst über <code>delete</code> aufgerufen. Hast also nen Memory-Leak.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568897</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Thu, 21 Aug 2008 12:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 16:32:03 GMT]]></title><description><![CDATA[<p>Hm...dann ergeben sich aber zwei Fragen: Wenn das Programm keinen Zeiger mehr auf den Speicher hat, kann der Speicher überschrieben werden?</p>
<p>Und wenn ich den Zeiger gesichert habe, kann dann irgend ein anderes Programm hergehen und die Stelle im Speicher überschreiben?</p>
<p>Ich bin grad am rätseln, warum die Variablen der angelegten Testklassen hin und wieder Zufallswerte bekommen. Wäre schön, wenn ich diese Möglichkeit ausschließen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569081</guid><dc:creator><![CDATA[Big_Exception]]></dc:creator><pubDate>Thu, 21 Aug 2008 16:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 16:49:47 GMT]]></title><description><![CDATA[<p>Jedes Programm hat seinen eigenen Speicher. Das heisst, dass ein anderes Programm nicht einfachso deinen Speicher überschreiben kann.</p>
<p>Wenn du jetzt Speicher anforderst, den Zeiger verlierst, dann bleibt der Speicher reserviert und (dein eigenes Programm) wird den Speicher nicht mehr überschreiben.</p>
<p>Erst, wenn dein Programm beendet wird, wird der Speicher vom OS aufgeräumt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569091</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 21 Aug 2008 16:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 16:50:35 GMT]]></title><description><![CDATA[<p>solange du keinen delete ausführst ist der Speicher weiterhin reserviert.... Wenn du Glück hast ist das Betriebssystem so intelligent, den Speicher wieder freizugeben, wenn du das Programm beendest, aber davon sollte man nicht ausgehen.</p>
<p>C(++) hat keinen Garbage-Collector... wenn du Speicher anforderst, musst du ihn auch wieder zurückgeben</p>
<p>Und wenn die Variablen deiner Klasse zufällige Werte haben, dann solltest du sie im Konstruktor evtl erstmal initialisieren... ein <code>int a; cout &lt;&lt; a &lt;&lt; endl;</code> ist nunmal undefiniert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569092</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Thu, 21 Aug 2008 16:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 16:52:44 GMT]]></title><description><![CDATA[<p>Big_Exception schrieb:</p>
<blockquote>
<p>Hm...dann ergeben sich aber zwei Fragen: Wenn das Programm keinen Zeiger mehr auf den Speicher hat, kann der Speicher überschrieben werden?</p>
</blockquote>
<p>Falls niemand einen Zeiger auf das Objekt hat, sicher. Natürlich wirst du diesen Fall niemals beobachten können, denn zur Erkennung müsstest du ja doch einen Zeiger behalten haben, was die Wiederverwendung wiederum ausschließen würde...</p>
<blockquote>
<p>Und wenn ich den Zeiger gesichert habe, kann dann irgend ein anderes Programm hergehen und die Stelle im Speicher überschreiben?</p>
</blockquote>
<p>Grundsätzlich sind die Adressräume von verschiedenen Programmen unterschiedlich (wir gehen mal von einem modernen Betriebssystem aus, nicht sowas wie DOS). Es ist schlicht unmöglich, auf den Speicher eines anderen Programmes zuzugreifen, es sei denn, man umgeht den Speichermanager auf Kernelebene oder es handelt sich von vornherein um shared Speicher. Für ganz gewöhnlichen Speicher in ganz gewöhnlichen Anwendungen spielt das keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569093</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 21 Aug 2008 16:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Thu, 21 Aug 2008 23:06:49 GMT]]></title><description><![CDATA[<p>Big_Exception schrieb:</p>
<blockquote>
<p>Wenn das Programm keinen Zeiger mehr auf den Speicher hat, kann der Speicher überschrieben werden?</p>
</blockquote>
<p>So wie ich deine Frage verstanden habe: Sobald kein Zeiger mehr auf einen dynamisch (mit <code>new</code> ) allokierten Speicherbereich zeigt, hast du ein Memory Leak. Das heisst, der angeforderte Speicherplatz bleibt zwar besetzt, aber du kannst nichts mehr mit ihm anfangen. Deshalb immer <code>delete</code> auf Zeiger ausführen, wenn deren mit <code>new</code> angeforderter Speicherplatz nicht mehr benötigt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569264</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 21 Aug 2008 23:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Fri, 22 Aug 2008 04:07:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Speicher allokieren und speicheradresse auf Pointer1 zeigen lassen
testklasse *Pointer1= new testKlasse();

//Pointer2 die Speicheradresse von Pointer1 zuweisen
testklasse *Pointer2= Pointer1;

//Pointer1 mit neuer Speicheradresse mit neu allokiertem speicher zuweisen
Pointer1= new testKlasse();
</code></pre>
<p>hier merkst du dir die speicheradresse der ersten Speicherallokation im Pointer2, und kannst nun Pointer1 überschreiben. später kannst du mit delete , beide speicehrbereichen mit Pointer1 und Poitner2 löschen...</p>
<p>hoffe dir ist das jetzt klarer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569274</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 22 Aug 2008 04:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Fri, 22 Aug 2008 06:58:38 GMT]]></title><description><![CDATA[<p>Ja, der Speicher kann überschrieben werden. Und er kann auch wieder freigegeben werden. Aber das ist kein definiertes Vorgehen, daher passiert das nur bei:<br />
a) schlechtem Design<br />
b) Programmierfehler.</p>
<p>Zu a gehört sowas:</p>
<pre><code class="language-cpp">int *a = new int(1);
int *b = new int(2);
b = 0;
delete (a+1);
</code></pre>
<p>Zu b gehört sowas:</p>
<pre><code class="language-cpp">char a[] = &quot;narf&quot;;
int *b = new int(1);
b = 0;
strcpy(a, &quot;narf2&quot;);
</code></pre>
<p>Hier ist *b dann 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569325</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 22 Aug 2008 06:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerzuweisung mit new: Bleibt der alte Zeiger erhalten? on Fri, 22 Aug 2008 07:13:09 GMT]]></title><description><![CDATA[<p>Big_Exception schrieb:</p>
<blockquote>
<p>Ich bin grad am rätseln, warum die Variablen der angelegten Testklassen hin und wieder Zufallswerte bekommen.</p>
</blockquote>
<p>Das kann nichts damit zu tun haben dass du keinen Zeiger auf den reservierten Bereich mehr hast. Denn wenn du keinen Zeiger drauf hast kannst du auch keien Werte von dort bekommen und damit können die Zufallswerte auch nicht von dort kommen. Ich tippe daher auch auf nicht erfolgte Initialisierungen.</p>
<p>P.S.: ja, mit irgendwelcher Pointer-Arithmetik könnte man aus Versehen vielleicht wieder auf den &quot;verlorenen&quot; Speicherbereich kommen. Dazu müsste man aber schon böswilligen oder absolut sinnfreien Code schreiben. Davon geh ich mal (trotz Speicherleck) nicht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569332</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 22 Aug 2008 07:13:09 GMT</pubDate></item></channel></rss>