<?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[[C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe da ein Problem mit o.g. Komponente. Diese erzeuge ich dynamisch in einer eigenen Klasse. Wenn ich nun die Anwendung starte und in der CheckListBox Eintrage aktiviere bzw. deaktiviere bekomme ich beim Beenden des Programms eine EAccessViolation. Dies passiert nur enn ich Einträge 'anklicke'. Auch passiert es ab und an, das das programm abbricht, wenn ich 'viele' Einträge aktiviere.</p>
<p>Im Debugger ist alles i.O., also die Komponente kann ich sehen und sie hat auch entsprechende Daten.</p>
<p>Normalerweise passiert sowas ja wenn man einen 'verbogenen Zeiger' zu beschreiben versucht, ich möchte jedoch behaupten, da ist kein Zeiger verbogen.</p>
<p>Hat jemand eine Idee?</p>
<p>Danke im voraus</p>
<p>Manfred</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190154/c-builder-2007-tchecklistbox-gt-eaccessviolation</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 11:59:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190154.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Aug 2007 09:56:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 09:56:33 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe da ein Problem mit o.g. Komponente. Diese erzeuge ich dynamisch in einer eigenen Klasse. Wenn ich nun die Anwendung starte und in der CheckListBox Eintrage aktiviere bzw. deaktiviere bekomme ich beim Beenden des Programms eine EAccessViolation. Dies passiert nur enn ich Einträge 'anklicke'. Auch passiert es ab und an, das das programm abbricht, wenn ich 'viele' Einträge aktiviere.</p>
<p>Im Debugger ist alles i.O., also die Komponente kann ich sehen und sie hat auch entsprechende Daten.</p>
<p>Normalerweise passiert sowas ja wenn man einen 'verbogenen Zeiger' zu beschreiben versucht, ich möchte jedoch behaupten, da ist kein Zeiger verbogen.</p>
<p>Hat jemand eine Idee?</p>
<p>Danke im voraus</p>
<p>Manfred</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348031</guid><dc:creator><![CDATA[mjorda]]></dc:creator><pubDate>Mon, 20 Aug 2007 09:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 10:06:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich möchte behauten das TCheckListBox selber fehlerfrei ist. Der eigentliche Fehler wird also durch deinen Code verursacht, damit ist es aber auch für uns ohne relevate Codeausschnitte schwer dazu etwas zu sagen.<br />
Das Abstürzen beim Beenden deutet darauf hin das du vermutlich bei den Aufräumarbeiten im Speicher einen Zeiger doppelt mit delete behandelst.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348040</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 20 Aug 2007 10:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 10:23:47 GMT]]></title><description><![CDATA[<p>Hallo akari,</p>
<p>iss schon klar das ohne code schnipsel wenig zu sagen ist.</p>
<p>Ich poste hier mal den OnClick event des Button rein, der die CheckListBox erzeugt und den FormDestroy-Event der den Speicher wieder freigibt.</p>
<p>void __fastcall TForm3::Button1Click(TObject *Sender)<br />
{<br />
TAttribut *neu;</p>
<p>neu = new TAttribut();<br />
neu-&gt;checklist = new TCheckListBox(this);<br />
neu-&gt;checklist-&gt;Parent = this;<br />
neu-&gt;checklist-&gt;Top = 100;<br />
for( int i=0; i&lt;400; i++ ) {<br />
neu-&gt;checklist-&gt;Items-&gt;Add(IntToStr(i));<br />
}<br />
neu-&gt;checklist-&gt;Checked[2] = true;<br />
neu-&gt;checklist-&gt;Checked[3] = true;<br />
//ShowMessage(neu-&gt;checklist-&gt;Owner-&gt;ClassName());<br />
usrHead = neu;<br />
}<br />
//---------------------------------------------------------------------------<br />
void __fastcall TForm3::FormDestroy(TObject *Sender)<br />
{<br />
if( usrHead != NULL ) {<br />
delete usrHead; usrHead = NULL;<br />
}</p>
<p>}</p>
<p>Dioe AccessViolation passiert tatsächlich beim Speicher freigeben in der eigenen Klasse (TAttributListe). Eigenartigerweise passiert dies aber nur wenn ich einen Eintrag in der CheckListBox aktiviere bzw. deaktiviere. Doppeltes Löschen müßte ja auch passieren wenn ich nichts aktiviere und das Programm beende.</p>
<p>Habe ich hier grundsätzlich was falsch verstanden?</p>
<p>Erzeuge ich in zusätzlich noch TEdit, TLabel oder sonstig VCL Komponenten dynamisch funktionieren dies einwandfrei; auch das delete dieser Komponenten bringt keinen Fehler.</p>
<p>Immer nocht ratlos bin. <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="😞"
    /></p>
<p>Manfred</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348053</guid><dc:creator><![CDATA[mjorda]]></dc:creator><pubDate>Mon, 20 Aug 2007 10:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 10:28:54 GMT]]></title><description><![CDATA[<p>hiho<br />
ich denke, dass man erst usrHead auf NULL setzen solte, und dann &quot;deleten&quot;<br />
ich hab aber eigentlich keine ahnung davon<br />
korrigiert mich, wenns falsch ist<br />
mfg allison</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348060</guid><dc:creator><![CDATA[allison]]></dc:creator><pubDate>Mon, 20 Aug 2007 10:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 10:55:33 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein vor dem Löschen auf NULL setzen ist Unsinn, denn dann wird ja nichts gelöscht.<br />
Auch die Abfrage auf NULL und das nachträgliche setzen auf NULL ist überflüssig, denn delete NULL ist gültig und macht nichts. Wichtiger wäre da im Konstruktor ds Forms den Zeiger auf NULL zu setzen weil Zeiger nicht automatisch initialisert werden.</p>
<p>Allerdings solltest du niemals OnDestroy/OnCreate benutzen sondern stattdessen den Destruktor (wenn nötig manuell hinzufügen) bzw. Konstruktor der Klasse. Begründung kannst du über SuFu finden.<br />
Da du aber beim Erstellen der CheckListBox this als Owner angibst brauchst du dich aber auch gar nicht um das manuelle Löschen des Controls zu kümmern. Also entferne OnDestroy samt Implementation komplett. Wahrscheinlich behebt das schon das Problem.</p>
<p>Und bitte beachten : sfds</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348087</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 20 Aug 2007 10:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 11:17:13 GMT]]></title><description><![CDATA[<p>Okay in den Destruktor kann ich das delete packen. Ganz drauf verzichte kann ich aber nicht, da ich die Instanzen während des programms desöfteren erzeuge und 'vernichte' ... da muß ich den Speicher doch wieder freigeben!!??</p>
<p>es erklärt auch nicht warum bei mehrfachem aktivieren einzelner Checkboxen in der CheckListBox eine AccessViolation kommt. ich weiß auch nicht wie ich das tracken soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348110</guid><dc:creator><![CDATA[mjorda]]></dc:creator><pubDate>Mon, 20 Aug 2007 11:17:13 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 11:24:20 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Wenn das Form gelöscht wird (also spätestens beim Schließen des Programms) werden auch alle Controls gelöscht die das Form <strong>besitzt</strong>. Da du der CheckListBox this als <strong>Owner</strong> übergibst kümmert sich also dann das Form darum.<br />
Manuell löschen must du nur wenn du NULL als Owner angibst (bzw. keine Owner-Eigenschaft existiert)</p>
<p>Aus deinem Code geht jedenfalls kein weitere Grund für einen Absturz hervor. Werden denn irgendwelche Aktionen im OnClickCheck-Event der ListBox ausgeführt?</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348123</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 20 Aug 2007 11:24:20 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 11:36:05 GMT]]></title><description><![CDATA[<p>Klar habe ich jetzt verstanden. der gepostete Code ist ja nur ein extrakt aus einem viel komplexeren Projekt. Die erzeugten TAttribut-Instanzen werden immer wieder gelöscht und neu erzeugt OHNE das das TForm gelöscht wird. Hintergrund ist ein Benutzervewaltung mit dynamischen Attributen. Wird ein neuer Benutzer ausgewählt müssen die Attribute neu erzeugt werden .. TLabels, TEdits, TComboboxen und eben auch ein TCheckListBox. Alle anderen Komponenten funzen ohne Probleme auch mit dem delete in der eingenen Klasse.</p>
<p>Auffällig ist das beim Beenden des programms dann und nur dann der Fehler auftritt wenn ich mindestens eine Checkbox verändert habe, sonst nicht.</p>
<p>Im OnClick-Event passiert nichts. es wird kein Event beim Erzeugen der Komponente gesetzt.</p>
<p>Habe die Erzeugung jetzt in den Konstruktor und das delete von usrHead in den destruktor des TForm verpflanzt; behebt den fehler leider auch nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348139</guid><dc:creator><![CDATA[mjorda]]></dc:creator><pubDate>Mon, 20 Aug 2007 11:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 12:37:03 GMT]]></title><description><![CDATA[<p>Ja, und das Problem ist immer noch, dass Du das Control von Hand löschst, obwohl Du bei der Erzeugung angegeben hast, dass der Besitzer das Form ist.</p>
<p>Ich bin mir recht sicher, dass akaris erster Post bereits die richtige Anwort war.</p>
<p>Die Frage ist, warum Du die Controls überhaupt löschst und neu erzeugst? Notwendig ist dies sicherlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348222</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 20 Aug 2007 12:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 13:01:08 GMT]]></title><description><![CDATA[<p>Ich würde die Komponenten ja mit ... = new TCheckListBox(NULL) erzeugen und auch selbst dafür sorgen sie wieder frei zu geben, aber das läßt die Umgebung nicht zu, das funktioniert nur bei TLabel's.</p>
<p>Also, die Anwendung soll eine Benutzerverwaltung darstellen, aber nicht jeder Benutzer hat die gleichen Attribute (Daten) und nicht zur gleichen Zeit; das ganz ist dynamisch. Jedesmal wenn ein Benutzer ausgewählt wird erzeuge ich je Attribut ein Instanz von TAttribut (eigene Klasse) mit einem TLabel und entweder einem TEdit, einer TComboBox, ..... oder aber einer TCheckListBox. Deshalb ist das notwendig.</p>
<p>Die Frage ist auch warum das Ganz bei den TEdit, TLabel, TComboBox, usw. keine Probleme macht? ich lösche ja nicht doppelt und die Anwendung steigt beim delete in der eigenen Klasse aus - aber NUR DANN wenn ich eine Checkbox aktiviert habe. Im Debugger ist alles genauso wie ohne Aktivierung einer Checkbox, mit dem Unterschied das ich eine AccessViolation bekomme.</p>
<p>Lösche ich die Komponenten nicht manuell, bekomme ich bei der nächsten benutzerauswahl ein &quot;Eine Komponente mit diesem Namen existiert bereits&quot; - Fehlermeldung.</p>
<p>Bin ja für andere Ansätze offen ........</p>
<p>Manfred</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348246</guid><dc:creator><![CDATA[mjorda]]></dc:creator><pubDate>Mon, 20 Aug 2007 13:01:08 GMT</pubDate></item><item><title><![CDATA[Reply to [C++ Builder 2007] TCheckListBox -&amp;gt; EAccessViolation on Mon, 20 Aug 2007 13:11:46 GMT]]></title><description><![CDATA[<p>Schwierig zu raten, was das Problem ist...</p>
<p>Als Workaround würde ich vielleicht versuchen, das ganze Form jeweils neu zu erstellen, die Controls erzeugen und dann das komplette Form löschen.<br />
Das Form würde ich dann komplett aus der Liste der automatisch erzeugten Formulare herausnehmen und grundsätzlich 'von Hand' erstellen und löschen.</p>
<p>Zumindest Testweise solltest Du das mal machen. Wenn es danach keine Probleme mehr gibt, weißt Du zumindest, dass es an dem manuellen Löschen der Controls liegt.</p>
<p>Möglicherweise wäre auch die Verwendung eines TFrames sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348255</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 20 Aug 2007 13:11:46 GMT</pubDate></item></channel></rss>