<?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[Frage zur Speicherverwaltung]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine (vielleicht dumme) Frage zur Speicherverwaltung. Ich habe eine Klasse TProcessImage und TForm1 (das Formular). In TProcessImage habe ich nun eine Funktion</p>
<pre><code class="language-cpp">Graphics::TBitmap * TProcessImage::SetCircleOfInterest(IplImage * source, int x, int y, int radius)
{
	 Graphics::TBitmap *bitmap;
	 bitmap = new Graphics::TBitmap;
	 IplImageToTBitmap(source, bitmap);
	 bitmap-&gt;Canvas-&gt;Ellipse(x - radius, y - radius, x + radius, y + radius);
	 CircelofInterest.x = x;
	 CircelofInterest.y = y;
	 CircelofInterest.width = radius;
	 CircelofInterest.height = radius;
	 return bitmap;
}
</code></pre>
<p>die von TForm1 aus aufgerufen wird:</p>
<pre><code class="language-cpp">void __fastcall TForm1::TBRadiusChange(TObject *Sender)
{
   if (myPI != NULL) {
	   Image5-&gt;Picture-&gt;Bitmap = myPI-&gt;SetCircleOfInterest(myPI-&gt;SrcImage, TBX-&gt;Position, TBY-&gt;Position, TBRadius-&gt;Position);
	   EdRadius-&gt;Text = IntToStr(TBRadius-&gt;Position);
   }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Mit TBRadiusChange wird mit einem Trackbar der Mittelpunkt einer Ellipse verschoben. Meine Frage ist nun, ob nach jedem Aufruf der Funktion<br />
Graphics::TBitmap * TProcessImage::SetCircleOfInterest der von der Funktion belegte Speicher wieder frei gegeben wird, oder ob ich das von Hand machen muss und wenn ja wie.<br />
Wenn ich TBRadiusChange häufig aufrufe, kommt irgendwann eine Exception, dass kein Speicherplatz mehr zur Verfügung steht. Ich hoffe meine Frage ist verständlich, sonst bitte einfach nachfragen...</p>
<p>Gruss<br />
Lodo2609</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196488/frage-zur-speicherverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 12:16:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196488.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Oct 2007 12:40:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Speicherverwaltung on Tue, 30 Oct 2007 12:40:04 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine (vielleicht dumme) Frage zur Speicherverwaltung. Ich habe eine Klasse TProcessImage und TForm1 (das Formular). In TProcessImage habe ich nun eine Funktion</p>
<pre><code class="language-cpp">Graphics::TBitmap * TProcessImage::SetCircleOfInterest(IplImage * source, int x, int y, int radius)
{
	 Graphics::TBitmap *bitmap;
	 bitmap = new Graphics::TBitmap;
	 IplImageToTBitmap(source, bitmap);
	 bitmap-&gt;Canvas-&gt;Ellipse(x - radius, y - radius, x + radius, y + radius);
	 CircelofInterest.x = x;
	 CircelofInterest.y = y;
	 CircelofInterest.width = radius;
	 CircelofInterest.height = radius;
	 return bitmap;
}
</code></pre>
<p>die von TForm1 aus aufgerufen wird:</p>
<pre><code class="language-cpp">void __fastcall TForm1::TBRadiusChange(TObject *Sender)
{
   if (myPI != NULL) {
	   Image5-&gt;Picture-&gt;Bitmap = myPI-&gt;SetCircleOfInterest(myPI-&gt;SrcImage, TBX-&gt;Position, TBY-&gt;Position, TBRadius-&gt;Position);
	   EdRadius-&gt;Text = IntToStr(TBRadius-&gt;Position);
   }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Mit TBRadiusChange wird mit einem Trackbar der Mittelpunkt einer Ellipse verschoben. Meine Frage ist nun, ob nach jedem Aufruf der Funktion<br />
Graphics::TBitmap * TProcessImage::SetCircleOfInterest der von der Funktion belegte Speicher wieder frei gegeben wird, oder ob ich das von Hand machen muss und wenn ja wie.<br />
Wenn ich TBRadiusChange häufig aufrufe, kommt irgendwann eine Exception, dass kein Speicherplatz mehr zur Verfügung steht. Ich hoffe meine Frage ist verständlich, sonst bitte einfach nachfragen...</p>
<p>Gruss<br />
Lodo2609</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394650</guid><dc:creator><![CDATA[lodo2609]]></dc:creator><pubDate>Tue, 30 Oct 2007 12:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherverwaltung on Tue, 30 Oct 2007 12:44:42 GMT]]></title><description><![CDATA[<p>Nein, um die Speicherverwaltung mußt du dich selber kümmern - C++ hat keinen Garbage Collector. Und das bedeutet, daß du das alte Objekt per delete entsorgen mußt, bevor du den letzten Bezug auf es verlierst (sprich - vor der Zuweisung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394656</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 12:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherverwaltung on Tue, 30 Oct 2007 13:40:08 GMT]]></title><description><![CDATA[<blockquote>
<p>(sprich - vor der Zuweisung).</p>
</blockquote>
<p>Danke für die Antwort. Mir ist nicht ganz klar, vor welcher Zuweisung: Vor dem</p>
<pre><code class="language-cpp">return bitmap
</code></pre>
<p>in der TProcessImage-Funktion oder wo?</p>
<p>Danke</p>
<p>Gruss Lodo2609</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394683</guid><dc:creator><![CDATA[lodo2609]]></dc:creator><pubDate>Tue, 30 Oct 2007 13:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherverwaltung on Tue, 30 Oct 2007 13:48:44 GMT]]></title><description><![CDATA[<p>Du mußt das delete dort aufrufen, wo du das bisherige Objekt nicht mehr benötigst - vor dem return ist also definitiv falsch. Ich meinte eher die Zuweisung in der TForm-Methode (durch das ...-&gt;Bitmap = ... signalisierst du, daß das alte Bitmap nicht mehr benötigt wird, also solltest du es entsorgen, bevor du die Verbindung darauf verlierst).</p>
<p>(btw, Smart-Pointer sind echt praktisch, um solche Probleme zu vermeigen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394687</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 13:48:44 GMT</pubDate></item></channel></rss>