<?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[Lokale Variablen?]]></title><description><![CDATA[<p>hallo zusammen,<br />
einfach nehme ich die folgende Funktion, die von msdn ist,</p>
<pre><code>void DrawARectangle(HDC hdc) 
{
    HPEN  hpen, hpenOld;
    HBRUSH hbrush, hbrushOld;

    // Create a red pen.
    hpen = CreatePen(PS_INSIDEFRAME, 13, RGB(255, 0, 0));
    // Create a green brush.
    hbrush = CreateSolidBrush(RGB(0, 255, 0));

    hpenOld = SelectObject(hdc, hpen);
    hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);

    Rectangle(hdc, 100,100, 700,200);

    // Do not forget to clean up.
    SelectObject(hdc, hpenOld);
    DeleteObject(hpen);
    SelectObject(hdc, hbrushOld);
    DeleteObject(hbrush);
}
</code></pre>
<p>ich habe eine Frage:<br />
ich glaube, die Variablen in Funktion sind lokale Variablen,<br />
wenn ich bei Funktion-Verlassen diese Objekte nicht &quot;clean up&quot;, bauen sie selber nicht ab?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207664/lokale-variablen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 15:17:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207664.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Mar 2008 14:13:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 15:08:15 GMT]]></title><description><![CDATA[<p>hallo zusammen,<br />
einfach nehme ich die folgende Funktion, die von msdn ist,</p>
<pre><code>void DrawARectangle(HDC hdc) 
{
    HPEN  hpen, hpenOld;
    HBRUSH hbrush, hbrushOld;

    // Create a red pen.
    hpen = CreatePen(PS_INSIDEFRAME, 13, RGB(255, 0, 0));
    // Create a green brush.
    hbrush = CreateSolidBrush(RGB(0, 255, 0));

    hpenOld = SelectObject(hdc, hpen);
    hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);

    Rectangle(hdc, 100,100, 700,200);

    // Do not forget to clean up.
    SelectObject(hdc, hpenOld);
    DeleteObject(hpen);
    SelectObject(hdc, hbrushOld);
    DeleteObject(hbrush);
}
</code></pre>
<p>ich habe eine Frage:<br />
ich glaube, die Variablen in Funktion sind lokale Variablen,<br />
wenn ich bei Funktion-Verlassen diese Objekte nicht &quot;clean up&quot;, bauen sie selber nicht ab?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471470</guid><dc:creator><![CDATA[damo]]></dc:creator><pubDate>Mon, 10 Mar 2008 15:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 14:44:51 GMT]]></title><description><![CDATA[<p>Doch, normalerweise tun sie das.<br />
Variablen, die in Funktionen erstellt werden, sind immer lokal zur Funktion, also außerhalb der Funktion nicht erkennbar (Ausnahme: Static-Variablen). Je nachdem, ob Deine Aufrufstandards stdcall oder cdecl sind, werden die Variablen von der aufrufenden oder aufgerufenen Funktion abgebaut- zumindest solche, die auf dem Stack liegen. Variablen, die nur im normalen Speicher angelegt werden, werden einfach ungültig, d. h. die Werte bleiben vorläufig im Speicher, aber der Speicher wird für den Zugriff durch andere Prozesse freigegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471489</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 10 Mar 2008 14:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 14:38:30 GMT]]></title><description><![CDATA[<p>damo schrieb:</p>
<blockquote>
<p>ich glaube, die Variablen in Funktion sind lokale Variablen</p>
</blockquote>
<p>Richtig.</p>
<p>damo schrieb:</p>
<blockquote>
<p>wenn ich bei Funktion-Verlassen diese Objekte nicht &quot;clean up&quot;, bauen sie selber nicht ab?</p>
</blockquote>
<p>Nein, die Variablen verlieren ihre Gültigkeit und damit auch ihren lokal zugewiesenen Speicherplatz) beim Verlassen der Funktion.<br />
Du mußt die Variablen somit nicht explizit löschen oder irgendwie aus dem Speicher entfernen.</p>
<p>Das gleiche glit auch für in Funktionsaufruf übergebene Parameter-Variablen (hier in Deinem Beispiel <em>HDC hdc</em>), welche prinzipbedingt auch lokale Variablen sind.</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471491</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Mon, 10 Mar 2008 14:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 14:42:15 GMT]]></title><description><![CDATA[<p>ohje...</p>
<p>die aufräumarbeiten beziehen sich hier auf die variablen (pointer) als GDI-Objekte, die in jedem Fall freigegeben werden müssen, sonst kommts zu GDI-Leaks (etwas anderes als memory-leaks <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471495</guid><dc:creator><![CDATA[Xantus]]></dc:creator><pubDate>Mon, 10 Mar 2008 14:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 14:50:47 GMT]]></title><description><![CDATA[<p>Ooops, ja, stimmt. SelectObject-Objekte müssen freigegeben werden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471500</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Mon, 10 Mar 2008 14:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 14:56:35 GMT]]></title><description><![CDATA[<p>Die Frage bezog sich auf die lokale Fariablen, oder nicht?</p>
<p>Was Windows-Objekte betrifft, gilt generell: Alles was Du generierst (Fenster, Mutex, Controls, Fonts, HDC, ... ), mußt Du nach Gebrauch auch wieder freigeben.</p>
<p>Es gibt natürlich auch Ausnahmen, z.B. bei GetStockObject() mußt Du hinterher nicht freigeben.</p>
<p>Da hilft nur eines: Immer die MSDN-Dokumentation der jeweiligen Funktionen genau lesen. Oft steht dort auch ein Hinweis, durch welche (Gegen-)Funktion ein Objekt wieder freigegeben bzw. zerstört werden.</p>
<p>Übrigens, habe mir Dein Code genauer angesehen: Mir fällt auf, daß Du versuchst die alten Objekte hpenOld und hbrushOld wiederherszustellen. Dabei sind diese Variablen ja gar nicht mit sinnvollen Werten geladen (da hätte Dein Compiler aber Warnungen melden müssen).</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471505</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Mon, 10 Mar 2008 14:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 15:07:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11581">@Elektronix</a> &amp; <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16457">@Mmacher</a> :<br />
vielen Dank! das habe ich auch gemeint!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18944">@Xantus</a><br />
hahhaaa, danke schön für Erinnerung! hab mich noch an die Code angeschaut, und dann jetzt hab richtig die Code verstanden.</p>
<p>Früher hab ich einfach gedacht, dass die Funktion beschreibt: wähle ein new pen, dann lösche es. Aber ganz falsch!!! Die &quot;clean up&quot; new pen, und dann das alte pen zurückgesetzt!!!</p>
<p>nochmal EUCH alle vielen Dank. (die komplette Codes jetzt sind da)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471509</guid><dc:creator><![CDATA[damo]]></dc:creator><pubDate>Mon, 10 Mar 2008 15:07:08 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Mon, 10 Mar 2008 23:08:02 GMT]]></title><description><![CDATA[<p>damo schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11581">@Elektronix</a> &amp; <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16457">@Mmacher</a> :<br />
vielen Dank! das habe ich auch gemeint!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18944">@Xantus</a><br />
hahhaaa, danke schön für Erinnerung! hab mich noch an die Code angeschaut, und dann jetzt hab richtig die Code verstanden.</p>
<p>Früher hab ich einfach gedacht, dass die Funktion beschreibt: wähle ein new pen, dann lösche es. Aber ganz falsch!!! Die &quot;clean up&quot; new pen, und dann das alte pen zurückgesetzt!!!</p>
<p>nochmal EUCH alle vielen Dank. (die komplette Codes jetzt sind da)</p>
</blockquote>
<p>Oha, kleine Frage am Rande: Soll das Deutsch sein?</p>
<p>Mmacher schrieb:</p>
<blockquote>
<p>Alles was Du generierst (Fenster, Mutex, Controls, Fonts, HDC, ... ), mußt Du nach Gebrauch auch wieder freigeben.</p>
</blockquote>
<p>Naja, Controls werden aber durch's Parent abgebaut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> . Da musst Du nicht explizit DestroyWindow aufrufen. Aber sonst stimmt das natürlich.</p>
<p>Mmacher schrieb:</p>
<blockquote>
<p>Übrigens, habe mir Dein Code genauer angesehen: Mir fällt auf, daß Du versuchst die alten Objekte hpenOld und hbrushOld wiederherszustellen. Dabei sind diese Variablen ja gar nicht mit sinnvollen Werten geladen (da hätte Dein Compiler aber Warnungen melden müssen).</p>
</blockquote>
<p>Doch der Code ist vollkommen korrekt. Er (bzw. der Code aus der MSDN <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ) setzt die alten Objekte, die sich im HDC befanden wieder ein. DAS und nur das ist korrektes Aufräumen (= CleanUp) (siehe Doku zu SelectObject) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> . Außerdem werden die Variablen doch initialisiert, hier:</p>
<pre><code class="language-cpp">hpenOld = SelectObject(hdc, hpen);
    hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1471815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471815</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Mon, 10 Mar 2008 23:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Tue, 11 Mar 2008 10:27:55 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Doch der Code ist vollkommen korrekt. Er (bzw. der Code aus der MSDN <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ) setzt die alten Objekte, die sich im HDC befanden wieder ein. DAS und nur das ist korrektes Aufräumen (= CleanUp) (siehe Doku zu SelectObject) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> . Außerdem werden die Variablen doch initialisiert, hier:</p>
<pre><code class="language-cpp">hpenOld = SelectObject(hdc, hpen);
    hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
</code></pre>
</blockquote>
<p>Meine Feststellung sieht so gesehen natürlich total unsinnig aus.<br />
Denn damo hat bei seinem ersten Post genau diese Zeilen weggelassen. Woraufhin er auf meine Feststellung hin, den Code im nachhinein korrigiert hat.<br />
Jetzt ist der Code so wie er jetzt da steht natürlich in Ordnung.</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471930</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Tue, 11 Mar 2008 10:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to Lokale Variablen? on Tue, 11 Mar 2008 10:59:58 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12048">@CodeFinder</a>:<br />
du hast mir viel Mals geholfen, ich glaube, dass du schon weisst, dass mein Deutsch nicht gut ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> was soll &quot;die komplette Codes jetzt sind da&quot; heissen?</p>
<p>ganz ehrlich sagen: Deutschsprache ist schwieriger als Assemblersprache.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1471952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1471952</guid><dc:creator><![CDATA[damo]]></dc:creator><pubDate>Tue, 11 Mar 2008 10:59:58 GMT</pubDate></item></channel></rss>