Announcement

Collapse
No announcement yet.

EAccessViolation und finde den Fehler nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EAccessViolation und finde den Fehler nicht

    Hallo zusammen,

    habe da ein hartnäckiges Problem. Ich habe eine eigene Klasse die ein TCheckListBox Element enhält. Dieses wird mit new erzeugt, nachdem die Instanz der eigenen Klasse erzeugt wurde. Das ganze ist teil eines TForm.

    Wenn ich nun im FormDestroy die Instanz der eigenen klasse lösche und uín deren Destructor delete checklistbox aufrufe bekomme ich ein AccessViolation bei Adress 7C928FEA! Diese bekomme ich aber nur, wenn ich in der TCheckListBox etwas verändert habe, also ein Item angeklickt habe.

    Im Debugger ist die CheckListBox mit einer gültigen Adresse zu sehen.

    Ich habe keinen Plan wie ich da ran gehen soll um den Fehler zu finden. Jemand vielleicht eine Idee?

    thx

    Manfred

  • #2
    Versuch im Konstruktor von TForm das new zu machen und im Destructor des TForm das delete deiner Klasse
    Christian

    Comment


    • #3
      Im Konstruktor kann ich das new nicht machen, da die Instanzen erst durch benutzeraktivität erzeugt werden. Meine Klasse lösche ich bereits im Destruktor.

      Wenn ich mir die Liste im Debugger anschaue, also direkt vor dem delete, dann sieht die völlig okay aus. Ich meine wenn da irgendwo ein zeiger verbogen wäre, müßte das doch auch passieren wenn ich keine Checkbox anklicke. Da funktioniert das aber wunderbar.

      Comment


      • #4
        Hat deine Klasse einen Owner?

        Da war doch mal was, dass dann die VCL das Löchen übernimmt. Versuch mal das Programm ohne das delete zu beenden
        Christian

        Comment


        • #5
          Stimmt da war mal was *grübel*

          Dann muß ich jetzt doch weiter ausholen. Also einen Owner haben die doch immer. ich lege das mit new TCheckListBox(this) an und this ist in dem Kontext das TForm. Ich habe da in meiner eigenen Klasse auch noch TEdit und TComboBox, sowie TLabel- Elemente. Bei denen klappt das delete wunderbar. und bei dem tCheckListBox klappt das ja auch wenn ich nichts anklicke bevor ich die Anwendung beende, was natürlich wenig Sinn macht. :-)

          Lasse ich das delete für die CheckListBox im Destruktor meiner Klasse weg, kommt auch keine Fehlermeldung. Ist nur ein bisserl blöde, weil ich nicht weiß was da im Speicher dann abgeht.

          Außerdem habe ich gerade bemerkt, wenn ich 8 Checkboxen in der TCheckListBox anklicke bricht das programm ebenfalls ab.

          Mist! Ich sehe einfach keinen Fehler im Programmcode und dennoch verabschiedet es sich.

          Comment


          • #6
            mal ein neues Projekt anlegen und nur deine Klasse rein. Dann mal new und delete.

            Hatte schon mekrwürdige Sachen, die letztendlich dazu führten, alle Forms nochmal anzulegen.....
            Christian

            Comment


            • #7
              Boar ist das krass!

              Habe ein neues Formular angelegt. Genau das gleiche Verhalten! Sobald ich eine Box anklicke bricht das programm beim Schließen des Formular ab.

              Wenn das Formular das delete machen wollte dann müßte das doch auch passieren, wenn ich nichts anklicke. Außerdem müßte das ja dann erst passieren nachdem ich das delete ausgeführt habe.

              Comment


              • #8
                Und eine eigene neue Komponente machen?

                Da habe ich so ein Verhalten bei TCheckListBox noch nicht beobachtet.

                http://www.marquardtnet.info/cecke/k...cklistbox.html
                Christian

                Comment


                • #9
                  Hmmm, gute Idee!

                  Da erhebt sich allerdings die Frage wie ich die in den Builder reinbekomme.
                  Komponente importieren / Typbiliothek inportieren?
                  Und die runtergeladene Dateiein in irgendein Verzeichnis?

                  Würde ich dann halt mal probieren.

                  Comment


                  • #10
                    Oder hier schauen:

                    http://www.marquardtnet.info/cecke/k...2/2_index.html

                    nach untern scrollen
                    Christian

                    Comment


                    • #11
                      Hallo Christian,

                      ist super beschrieben auf deiner Seite. Mir liegt die Komponente im Quelltext vor und leider gibt es in der bcb2007 Version unter kein 'Komponente installieren' nur 'neue Komponente', 'Package installieren' und 'Komponente importieren'. *Schulterzuck*

                      ist schon ab und an ein kreuz mit dem bcb.

                      Comment


                      • #12
                        Neues Projekt auswählen und zwar "Neues Packages". Die cpp,h, dcr Datei hinzufügen. "Akualisieren" über rechte Maustaste auf dem Package-Namen im Projektfenster auswählen, dann installieren
                        Christian

                        Comment


                        • #13
                          So, Komponente installiert und in neuem Projekt getestet. Gleiches Verhalten wie bei der TCheckListBox. Ich krieg echt die Krise ......

                          Comment


                          • #14
                            schick mir mal dein Projekt
                            Christian

                            Comment


                            • #15
                              Das Testprojekt? Weil das echte wird nicht funzen, da brauchste einen mysql Server und eine AD. Aber meine eigene Klasse habe ich auch in dem Testprojekt drin.

                              Wohin schicken? und Danke schonmal für's gucken.

                              Comment

                              Working...
                              X