<?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[Speicherleck]]></title><description><![CDATA[<p>Ich habe irgendwo in meinem Code ein Speicherleck, kann es aber nicht finden.<br />
Meine GDI Objekte vermehren sich...<br />
was ist daran falsch?</p>
<pre><code class="language-cpp">void CCanvas::Line(int x1,int y1, int x2,int y2)
{
	HPEN hPen;
	hPen = CreatePen(0,0,PenColor);
	m_pDC-&gt;SelectObject(hPen);
	m_pDC-&gt;MoveTo(x0+x1,y0+y1);
	m_pDC-&gt;LineTo(x0+x2,y0+y2);
	m_pDC-&gt;DeleteTempMap();
	DeleteObject(hPen);

}
</code></pre>
<p>so wird die funktion aufgerufen:</p>
<p>void CPlainXYDialog::OnMouseMove(UINT nFlags, CPoint point)<br />
{</p>
<p>if ((nFlags &amp; MK_LBUTTON) == MK_LBUTTON)<br />
{<br />
Canvas.m_pDC = this-&gt;GetDC();<br />
Canvas.PenColor = m_pDoc-&gt;Image3D.ColorPalette.CurrentColor;<br />
if (m_ptLastCursorClickPosition.x !=0)</p>
<p>Canvas.Line(m_ptLastCursorClickPosition,point);<br />
Canvas.m_pDC-&gt;DeleteTempMap();</p>
<p>}</p>
<p>m_ptLastCursorPosition2 = m_ptLastCursorPosition;<br />
m_ptLastCursorPosition = point;</p>
<p>CDialog::OnMouseMove(nFlags, point);</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/70810/speicherleck</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 11:22:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/70810.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Apr 2004 21:28:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 21:28:31 GMT]]></title><description><![CDATA[<p>Ich habe irgendwo in meinem Code ein Speicherleck, kann es aber nicht finden.<br />
Meine GDI Objekte vermehren sich...<br />
was ist daran falsch?</p>
<pre><code class="language-cpp">void CCanvas::Line(int x1,int y1, int x2,int y2)
{
	HPEN hPen;
	hPen = CreatePen(0,0,PenColor);
	m_pDC-&gt;SelectObject(hPen);
	m_pDC-&gt;MoveTo(x0+x1,y0+y1);
	m_pDC-&gt;LineTo(x0+x2,y0+y2);
	m_pDC-&gt;DeleteTempMap();
	DeleteObject(hPen);

}
</code></pre>
<p>so wird die funktion aufgerufen:</p>
<p>void CPlainXYDialog::OnMouseMove(UINT nFlags, CPoint point)<br />
{</p>
<p>if ((nFlags &amp; MK_LBUTTON) == MK_LBUTTON)<br />
{<br />
Canvas.m_pDC = this-&gt;GetDC();<br />
Canvas.PenColor = m_pDoc-&gt;Image3D.ColorPalette.CurrentColor;<br />
if (m_ptLastCursorClickPosition.x !=0)</p>
<p>Canvas.Line(m_ptLastCursorClickPosition,point);<br />
Canvas.m_pDC-&gt;DeleteTempMap();</p>
<p>}</p>
<p>m_ptLastCursorPosition2 = m_ptLastCursorPosition;<br />
m_ptLastCursorPosition = point;</p>
<p>CDialog::OnMouseMove(nFlags, point);</p>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499546</guid><dc:creator><![CDATA[Bassai]]></dc:creator><pubDate>Sun, 11 Apr 2004 21:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 21:58:25 GMT]]></title><description><![CDATA[<p>Wenn man ein Objekt mit SelectObject in einen Gerätekontext selektiert, wird das Objekt, das zuvor selektiert war, zurückgegeben. Nimm noch eine Variable, die z.B. hOldPen heißt, und speichere das alte Pen. Am Ende deiner Zeichenoperationen selektierst du das alte Pen wieder in den Gerätekontext, damit wirklich alle Ressourcen wieder freigegeben werden. So sollte es zumindest sein.</p>
<p>Aber: Obwohl ich das bei meinem Programm nicht mache (weil es noch im Alpha-Status ist), vermehren sich die GDI Objekte nicht...Irgendwie eigenartig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499565</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sun, 11 Apr 2004 21:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 22:01:42 GMT]]></title><description><![CDATA[<p>Ich vermute mal das ganze da is nen Wrapper und nutzt unter anderem SelectObject()<br />
[cpp]<br />
<strong>SelectObject()</strong><br />
This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.<br />
[/cpp]<br />
Du solltest den Rückgabewert (was quasi der alte PEN ist) speichern und bevor du deinen neuen Pen mit DeleteObject() löscht den alten Pen wieder in den DeviceContext reinselektieren.<br />
Ansonsten ist der alte Pen quasi im Speicher verloren...</p>
<p>...außerdem sagt die PSDK-Doku zu DeleteObject:<br />
&quot;Do not delete a drawing object (pen or brush) while it is still selected into a DC.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499566</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 11 Apr 2004 22:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 22:12:12 GMT]]></title><description><![CDATA[<p>Danke, das Hauptproblem ist weg, ich hab jetzt nur noch kleinere Speicherlecks <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/499573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499573</guid><dc:creator><![CDATA[Bassai]]></dc:creator><pubDate>Sun, 11 Apr 2004 22:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 22:14:39 GMT]]></title><description><![CDATA[<p>Wenn ich einen kompatiblen Gerätekontext erstellt habe, dann hat der ja zu Beginn keine Bitmap drin, falls ich micht nicht täusche. In diesem Fall muss ich nicht das alte Objekt speichern, und später wieder zurückselektieren, oder? Aber wenn das der Fall ist, dann macht der Hinweis aus der MSDN Probleme; nämlich der, dass man keine Objekte löschen soll, die gerade im DC sind...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499574</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sun, 11 Apr 2004 22:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 22:16:37 GMT]]></title><description><![CDATA[<p>Achja, ich erinnere mich in einem Buch gelesen zu haben, dass in einem Memory DC (also kompatible DC's) zu Beginn ein monochromes Bitmap drinnen ist. Somit hab ich mir die Frage von vorhin selber beantwortet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499577</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sun, 11 Apr 2004 22:16:37 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 22:34:36 GMT]]></title><description><![CDATA[<p>Hey Aziz,<br />
<a href="http://www.c-plusplus.net/forum/posting.php?mode=editpost&amp;p=70810" rel="nofollow">http://www.c-plusplus.net/forum/posting.php?mode=editpost&amp;p=70810</a></p>
<p>nicht</p>
<p><a href="http://www.c-plusplus.net/forum/posting.php?mode=reply&amp;t=70810" rel="nofollow">http://www.c-plusplus.net/forum/posting.php?mode=reply&amp;t=70810</a></p>
<p>:p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499580</guid><dc:creator><![CDATA[ChrisK]]></dc:creator><pubDate>Sun, 11 Apr 2004 22:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 22:40:57 GMT]]></title><description><![CDATA[<p>Hey, ich versuche die Anzahl meiner Postings zu erhöhen <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="😉"
    /> <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/499583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499583</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sun, 11 Apr 2004 22:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 23:07:53 GMT]]></title><description><![CDATA[<p>Hab ich mir auch schon gedacht. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/499592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499592</guid><dc:creator><![CDATA[ChrisK]]></dc:creator><pubDate>Sun, 11 Apr 2004 23:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Sun, 11 Apr 2004 23:22:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">HGDIOBJ OldObj;
OldObj=SelectObject(hdc, newObject);
  // bla :D
DeleteObject( SelectObject(hdc, OldObj) );
</code></pre>
<p>...kann nie schaden <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=";D"
      alt="😉"
    /></p>
<p>Kewl - Smileys funzen sogar im Quellcode <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/499594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499594</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 11 Apr 2004 23:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Mon, 12 Apr 2004 12:36:03 GMT]]></title><description><![CDATA[<p>Nur mal eine blöde Frage - wie stellt man denn Speicherlecks fest? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/499770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/499770</guid><dc:creator><![CDATA[Unwissender2004]]></dc:creator><pubDate>Mon, 12 Apr 2004 12:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Mon, 12 Apr 2004 18:27:04 GMT]]></title><description><![CDATA[<p>z.B. indem du im Taskmanager siehst, dass der Speicherverbrauch mit zunehmender Zeit immer weiter ansteigt <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/500012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/500012</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Mon, 12 Apr 2004 18:27:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Mon, 12 Apr 2004 21:41:33 GMT]]></title><description><![CDATA[<p>Im Taskmanager kannst du sogar sehen wieviele GDI-Objekte von den Programmen verwendet werden, die gerade laufen. Einfach im Menü auf Ansicht-&gt;Spalten gehen und dann bei der Checkbox &quot;GDI-Objekte&quot; ein Häkchen setzen.</p>
<p>Und logischerweise erhöht sich die Anzahl der verwendeten GDI-Objekte wenn dein Programm leakt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/500101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/500101</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Mon, 12 Apr 2004 21:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck on Mon, 12 Apr 2004 22:22:53 GMT]]></title><description><![CDATA[<p>Jep - sollte man eigentlich immer tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/500121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/500121</guid><dc:creator><![CDATA[ChrisK]]></dc:creator><pubDate>Mon, 12 Apr 2004 22:22:53 GMT</pubDate></item></channel></rss>