<?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[Statische Zeiger freigeben]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich deklariere einen Zeiger.</p>
<p>Weise ihm Heap-Speicher zu.</p>
<p>Arbeite mit dem Zeiger.</p>
<p>Gebe den Heap wieder frei, indem ich den Zeiger lösche.</p>
<p>So sollte man sich die Vorgehensweise von Zeigern vorstellen, die auf den Heap-Speicher zugreifen.</p>
<p>Jetzt gibt es aber in meinem Code eine Unstimmigkeit: Mein Zeiger ist static.</p>
<p>Versuche ich den Zeiger dann im späteren Verlauf zu löschen, gibt mir mein Debugger eine Heap Fehlermeldung aus (er kann nicht auf den Heap zugreifen bzw. ihn nicht freigeben).</p>
<p>Hier kurz ein Beispielcode:</p>
<pre><code class="language-cpp">int iBufferSize;
static char *szBuffer;

iBufferSize = 100;
szBuffer = new char( iBufferSize );

// ... mit dem Zeiger arbeiten ...

delete[] szBuffer; // Gibt Fehler beim Debuggen aus, weil Zeiger static ist
</code></pre>
<p>- Wieso ist das so? (klar, wegen dem static - aber wie und wieso wirkt static so imens darauf ein)</p>
<p>- Ist es schlimm, dass ich den Speicher nicht freigeben kann (immerhin belastet man den RAM so unnötig).</p>
<p>- Gibt der Compiler den Speicher selber wieder frei?</p>
<p>Gruß, paSe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237416/statische-zeiger-freigeben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 10:14:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237416.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Mar 2009 14:08:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Statische Zeiger freigeben on Sat, 28 Mar 2009 14:09:14 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich deklariere einen Zeiger.</p>
<p>Weise ihm Heap-Speicher zu.</p>
<p>Arbeite mit dem Zeiger.</p>
<p>Gebe den Heap wieder frei, indem ich den Zeiger lösche.</p>
<p>So sollte man sich die Vorgehensweise von Zeigern vorstellen, die auf den Heap-Speicher zugreifen.</p>
<p>Jetzt gibt es aber in meinem Code eine Unstimmigkeit: Mein Zeiger ist static.</p>
<p>Versuche ich den Zeiger dann im späteren Verlauf zu löschen, gibt mir mein Debugger eine Heap Fehlermeldung aus (er kann nicht auf den Heap zugreifen bzw. ihn nicht freigeben).</p>
<p>Hier kurz ein Beispielcode:</p>
<pre><code class="language-cpp">int iBufferSize;
static char *szBuffer;

iBufferSize = 100;
szBuffer = new char( iBufferSize );

// ... mit dem Zeiger arbeiten ...

delete[] szBuffer; // Gibt Fehler beim Debuggen aus, weil Zeiger static ist
</code></pre>
<p>- Wieso ist das so? (klar, wegen dem static - aber wie und wieso wirkt static so imens darauf ein)</p>
<p>- Ist es schlimm, dass ich den Speicher nicht freigeben kann (immerhin belastet man den RAM so unnötig).</p>
<p>- Gibt der Compiler den Speicher selber wieder frei?</p>
<p>Gruß, paSe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687437</guid><dc:creator><![CDATA[unlimieD.paSe]]></dc:creator><pubDate>Sat, 28 Mar 2009 14:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Statische Zeiger freigeben on Sat, 28 Mar 2009 14:15:58 GMT]]></title><description><![CDATA[<p>unlimieD.paSe schrieb:</p>
<blockquote>
<p>Gebe den Heap wieder frei, indem ich den Zeiger lösche.</p>
</blockquote>
<p>Du kannst den Zeiger nicht löschen. Höchstens den Speicherbereich dahinter.</p>
<p>unlimieD.paSe schrieb:</p>
<blockquote>
<p>- Wieso ist das so? (klar, wegen dem static - aber wie und wieso wirkt static so imens darauf ein)</p>
</blockquote>
<p>Nein, es ist <strong>nicht</strong> wegen <code>static</code> . Hast du das Gleiche mal mit einem Zeiger auf dem Stack probiert?</p>
<p>unlimieD.paSe schrieb:</p>
<blockquote>
<p>- Ist es schlimm, dass ich den Speicher nicht freigeben kann (immerhin belastet man den RAM so unnötig).</p>
</blockquote>
<p>Ja, du solltest dich darauf achten, angeforderten Speicher wieder freizugeben.</p>
<p>unlimieD.paSe schrieb:</p>
<blockquote>
<p>- Gibt der Compiler den Speicher selber wieder frei?</p>
</blockquote>
<p>Nein, der Compiler sowieso nicht. Wenn du Glück hast, gibt das Betriebssystem den Speicher beim Beenden frei, aber verlass dich besser nicht drauf. Es ist besser, du hast für jedes <code>new</code> ein entsprechendes <code>delete</code> und für jedes <code>new[]</code> ein <code>delete[]</code> .</p>
<p>Dein Fehler besteht übrigens darin, dass du <code>delete[]</code> auf mit <code>new</code> allokierten Speicher anwendest. Benutze für die Array-Grösse eckige Klammern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687441</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 28 Mar 2009 14:15:58 GMT</pubDate></item></channel></rss>