<?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[Formular löschen]]></title><description><![CDATA[<p>Hallo zusammen, ich habe ein Problem und hoffe hier kann mir jemand helfen.</p>
<p>Der Sachverhalt meiner Anwendung ist der, dass ein Formular mit new erzeugt wird. Mich interessiert was mit dem Speicher passiert den ich mit new angelegt habe passiert wenn die Anwendung geschlossen wird? Wird dieser Freigegeben oder muss ich selber diesen Freigeben?</p>
<pre><code class="language-cpp">void __fastcall TF::FormClose(TObject *Sender, TCloseAction &amp;Action)
{
   Action = caFree;
   F=NULL;
}
</code></pre>
<p>Anlegen von einem Formular:</p>
<pre><code class="language-cpp">if(F)
   {
       delete F;
   }

   F = new TF(Owner);
   F-&gt;Show();
</code></pre>
<p>Kann mir bitte jemand helfen?<br />
*<br />
Mit freundlichen Grüßen<br />
coder24h<br />
*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144906/formular-löschen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 23:26:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144906.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Apr 2006 20:18:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Formular löschen on Sat, 22 Apr 2006 20:18:01 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich habe ein Problem und hoffe hier kann mir jemand helfen.</p>
<p>Der Sachverhalt meiner Anwendung ist der, dass ein Formular mit new erzeugt wird. Mich interessiert was mit dem Speicher passiert den ich mit new angelegt habe passiert wenn die Anwendung geschlossen wird? Wird dieser Freigegeben oder muss ich selber diesen Freigeben?</p>
<pre><code class="language-cpp">void __fastcall TF::FormClose(TObject *Sender, TCloseAction &amp;Action)
{
   Action = caFree;
   F=NULL;
}
</code></pre>
<p>Anlegen von einem Formular:</p>
<pre><code class="language-cpp">if(F)
   {
       delete F;
   }

   F = new TF(Owner);
   F-&gt;Show();
</code></pre>
<p>Kann mir bitte jemand helfen?<br />
*<br />
Mit freundlichen Grüßen<br />
coder24h<br />
*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042983</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Sat, 22 Apr 2006 20:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sat, 22 Apr 2006 21:11:57 GMT]]></title><description><![CDATA[<p>Das löschen übernimmt in dem Fall der Owner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043020</guid><dc:creator><![CDATA[owner]]></dc:creator><pubDate>Sat, 22 Apr 2006 21:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sat, 22 Apr 2006 23:13:34 GMT]]></title><description><![CDATA[<p>Mich interessiert speziell was mit dem Speicher passiert wenn ein Formular geschlossen wird!? Wird der Speicher freigegeben oder muss dieser von mir freigegeben werden?</p>
<pre><code class="language-cpp">F = new TF(Owner);
F-&gt;Show();
</code></pre>
<p>Jetzt schließt der Anwender das Formular. Ist der Speicher frei oder nicht? Wenn nicht, wie kann ich daführ sorgen, dass der Speicher nach dem Schließen auch frei wird?<br />
*<br />
MfG<br />
coder24h*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043078</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Sat, 22 Apr 2006 23:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 03:53:35 GMT]]></title><description><![CDATA[<p>Der Speicher ist nicht freigegeben, weil das Formular ja noch existiert. Das Schließen des Fensters bedeutet nicht, dass das Formular &quot;zu Abschuss freigegeben&quot; ist. Es könnte ja Bedarf bestehen das Formular erneut anzuzeigen. Unterscheidungen sind Close, Destroy, Show, ShowModal.</p>
<p>Aber -&gt; siehe Antwort von owner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043103</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Sun, 23 Apr 2006 03:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 09:10:11 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>christian schrieb:</p>
<blockquote>
<p>Das Schließen des Fensters bedeutet nicht, dass das Formular &quot;zu Abschuss freigegeben&quot; ist.</p>
</blockquote>
<p>Das ist im allgemeinen richtig, aber coder24h hat ja in OnClose ja <em>Action = caFree;</em>, was das Form nach dem ersten schließen tatsächlich automatisch löscht und damit ungültig macht.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043152</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 23 Apr 2006 09:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 09:25:31 GMT]]></title><description><![CDATA[<p>Kann mir vielleicht jemand auf die Finger schauen, denn wenn die Aussage stimmt, dass der Speicher nicht freigegeben wird, verstehe ich nicht warum ich eine Zugriffsverletzung bekomme wenn ich nach dem Schleißen des Formulars diesen noch mal versuche freizugeben.</p>
<p>Anwendung die DLL nutzt:</p>
<pre><code class="language-cpp">bool TFormDLLLoader::LoadConComDLL(void)
{
	if(!this)	return false;    // TFormDLLLoader besitzt keine Instanz
    if(ConComDLL !=0) return true;

	ConComDLL = LoadLibrary(&quot;DomkeDLL01.dll&quot;); // Laden

    if (ConComDLL !=0)	return true; // Laden erfolgreich
    return false;          // Laden fehlgeschlagen
}

bool TFormDLLLoader::FreeConComDLL(void)
{
	if(!this) return false;	// TFormDLLLoader besitzt keine Instanz

    FreeLibrary(ConComDLL); // Entaden
    if(ConComDLL !=0) return true; // Entaden fehlgeschlagen
    return false; // Entaden erfolgreich
}

bool TFormDLLLoader::OpenConComForm(void)
{
	if(!this || ConComDLL ==0) return false;	// TFormDLLLoader besitzt keine Instanz
    if(!pOpenConComForm) //CloseConComForm(); // Bereits geöffnet, also schließen

    pOpenConComForm = (TOpenForm*)GetProcAddress(ConComDLL, &quot;_OpenForm&quot;);
    if(!pOpenConComForm)	return false; // Öffnen fehlgeschlagen
    pOpenConComForm(this); // Öffnen
    return true; // Öffnen erfolgreich
}

void __fastcall TFormDLLLoader::miDNConComClick(TObject *Sender)
{
	LoadConComDLL();
    OpenConComForm();
}
</code></pre>
<p>in der DLL:</p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec (dllexport) void OpenForm(TComponent* Owner)
{
	if(F)
    {
        delete F;
    }

    F = new TF(Owner);
	F-&gt;Show();
}

void __fastcall TF::FormClose(TObject *Sender, TCloseAction &amp;Action)
{
   Action = caFree;
   F=NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1043158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043158</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Sun, 23 Apr 2006 09:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 09:32:40 GMT]]></title><description><![CDATA[<p>Danke <strong>akari</strong>, du hast mich jetzt aufgeklärt <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="😉"
    /> Was ich nicht verstehe, warum man nicht den gleichen Speicher, im diesen Fall des Formulars, mehrmals freigeben kann? Wenn ich den Speicher bei den anderen Datentypen (<strong>int, double,…</strong>) mit delete mehrmals freigebe, bekomme ich keine Zugriffsverletzungen!<br />
*<br />
Mit freundlichen Grüßen<br />
coder24h<br />
*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043161</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Sun, 23 Apr 2006 09:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 09:36:37 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>denn wenn die Aussage stimmt, dass der Speicher nicht freigegeben wird</p>
</blockquote>
<p>BCB-Hilfe schrieb:</p>
<blockquote>
<p>caFree : Das Formular wird geschlossen und sein Speicher freigegeben.</p>
</blockquote>
<p>Desweiteren :</p>
<pre><code class="language-cpp">::LoadConComDLL(void)
</code></pre>
<p>das ist veralteter C-Stil, in C++ solltest du da kein void schreiben.</p>
<pre><code class="language-cpp">if(!this)    return false;
</code></pre>
<p>Diese Zeile ist überflüssig. Solltest du die tatsächlich aber brauchen (weil du die Mehtode irgendwo für eine NULL-Instanz aufrufst), hast du einen Konzepzfehler, den du beheben solltest und nicht durch solche Symptom-Behandlung überspringst.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043164</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 23 Apr 2006 09:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 09:39:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>warum man nicht den gleichen Speicher, im diesen Fall des Formulars, mehrmals freigeben kann?</p>
</blockquote>
<p>Ich verstehe nicht was du meinst, Speicher darf man <strong>immer</strong> nur einmal wieder freigeben. Aber je nachdem was das für ein Datentyp ist, kann der Aufruf des Destruktors durch das delete auch zu verschiedenen undefinierten Fehlern führen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043167</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 23 Apr 2006 09:39:41 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 09:58:09 GMT]]></title><description><![CDATA[<p>Ich habe mich da falsch ausgedrückt, es ist mir klar, dass man den Speicher 1-mal freigeben kann! Ich habe nur nicht verstanden warum manchmal eine Zugriffsverletzung auftritt und manchmal nicht wenn man das mehrmals macht.<br />
*<br />
Vielen Dank<br />
coder24h<br />
*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043175</guid><dc:creator><![CDATA[coder24h]]></dc:creator><pubDate>Sun, 23 Apr 2006 09:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to Formular löschen on Sun, 23 Apr 2006 10:03:34 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>diese Frage stellt sich nicht. Das mehrmalige Freigeben kann jeden beliebigen Fehlerverursachen, weil es undefiniert ist. Möglichweise merkt der User nichts davon, möglicherweise stürtzt auch der ganze PC sofort ab...</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043180</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 23 Apr 2006 10:03:34 GMT</pubDate></item></channel></rss>