<?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[Gültigkeit von Objekten, die mit new angelegt wurden]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich hatte vor ungefähr so etwas zu machen:</p>
<pre><code class="language-cpp">irgendeinTyp * Zeiger;

void funktion(){
    Zeiger = new irgendeinTyp;
}

funktion();

*Zeiger == ??????
</code></pre>
<p>Das neu erstellte objekt ist ja nur innerhalb von funktion() gültig.</p>
<p>Wie schaffe ich es, dass es auch außerhalb erhalten bleibt?</p>
<p>Vielen Dank für Tipps</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207077/gültigkeit-von-objekten-die-mit-new-angelegt-wurden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 01:15:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207077.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Mar 2008 15:12:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gültigkeit von Objekten, die mit new angelegt wurden on Mon, 03 Mar 2008 15:12:57 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich hatte vor ungefähr so etwas zu machen:</p>
<pre><code class="language-cpp">irgendeinTyp * Zeiger;

void funktion(){
    Zeiger = new irgendeinTyp;
}

funktion();

*Zeiger == ??????
</code></pre>
<p>Das neu erstellte objekt ist ja nur innerhalb von funktion() gültig.</p>
<p>Wie schaffe ich es, dass es auch außerhalb erhalten bleibt?</p>
<p>Vielen Dank für Tipps</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1467381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1467381</guid><dc:creator><![CDATA[theanzelm]]></dc:creator><pubDate>Mon, 03 Mar 2008 15:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeit von Objekten, die mit new angelegt wurden on Mon, 03 Mar 2008 15:18:52 GMT]]></title><description><![CDATA[<p>Es ist auch außerhalb gültig, da es nicht auf dem Stack liegt (da mit new erstellt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1467386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1467386</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 03 Mar 2008 15:18:52 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeit von Objekten, die mit new angelegt wurden on Mon, 03 Mar 2008 15:23:00 GMT]]></title><description><![CDATA[<p>Ok in meinem fall liegt es an etwas anderem.<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1467394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1467394</guid><dc:creator><![CDATA[theanzelm]]></dc:creator><pubDate>Mon, 03 Mar 2008 15:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeit von Objekten, die mit new angelegt wurden on Mon, 03 Mar 2008 16:01:29 GMT]]></title><description><![CDATA[<p>theanzelm schrieb:</p>
<blockquote>
<p>Ok in meinem fall liegt es an etwas anderem.<br />
Danke!</p>
</blockquote>
<p>Aber unabhängig davon deutet der Codeausschnitt ein paar Dinge an die zumindestens von dir beachtet werden sollten:<br />
a) Möglichst keine globalen Variablen verwenden.<br />
b) Zeiger immer mit 0 initialisieren, sofern du ihnen nicht direkt etwas gültiges zuweist.<br />
c) Daran denken, das Speicher der mit new erzeugt wird auch wieder freigegeben (delete) werden muss.<br />
d) Deine Funktion sollte vorher prüfen ob der Zeiger !=0 ist, und dann (je nach Anwendungsfall) entweder keine Allozierung mehr vornehmen oder vorher den Speicher freigeben.<br />
e) Wenn du nach einem delete nochmal auf den Zeiger zugreifen kannst, diesen nach dem Delete auch auf 0 setzen...</p>
<p>Grundsätzlich: Lokale Variablen werden zerstört, wobei es sich nur auf die Variable bezieht:</p>
<pre><code class="language-cpp">void foo1()
{
  int *a = new int(4);
} // &lt;-- hier wird die Variable zerstört, nicht aber der allozierte
  // Speicherbereich freigegeben

int* foo2()
{
  int *a = new int(4);
  // ...
  return a;
} // &lt;-- hier wird die Variable wieder zerstört, aber die Adresse auf den
  // Speicherbereich zurückgegeben (dennoch unsauber, aber das ist anderes
  // Thema, später dazu mehr (*)

void foo3(int*&amp; a)
{
  if(!a)
    a = new int(4); // &lt;-- hier wird der übergebene Zeiger modifiziert... (*)
}
</code></pre>
<p>* Grundsätzlich ist es immer problematisch wenn Speicherallozierung und -freigabe in unterschiedlicher Verantwortung liegt.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1467419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1467419</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 03 Mar 2008 16:01:29 GMT</pubDate></item></channel></rss>