![]() |
Fehler beim Benden
Ich muss für meine Facharbeit im INfo-LK ein Programm schreiben.
Funktioniert auch, alles schön und gut. Aber wenn man es beenden will, kommen verschiedene Fehlermeldungen. Und ich habe keine Ahnung warum. Woran könnte sowas theoretisch alles liegen? :?: |
Re: Fehler beim Benden
Als ich in den Südstaaten war habe ich öfters an Läden folgendes Schild gesehen:
Zitat:
Zitat:
Es kann tausende von Gründen geben, waum dein Programm abstürzt. Ohne etwas Hilfe von dir artet das aber hier in einer endlosen Raterei aus. |
Re: Fehler beim Benden
du musst uns schon sagen was du für nen fehelr hattets :)
|
Re: Fehler beim Benden
gut, direkt wenn ich es (in delphi) beende kommen zwei fehler mit "Zugriffsverletzung" auf Adresse soundso. Will ich es dann wieder strten kommt "Format '%p' ungültig oder nicht kompatibel mit argument". Ich weiss halt nicht ob wer damit was anfangen kann, aber könnte ja sein dass bestimmte Fehler typisch für irgendwas sind
|
Re: Fehler beim Benden
Jetzt kommst du nicht mehr umhinn bissl source zu posten. Der wirst irgendwas im OnDestroy oder onClose haben was auf etwas zugreift das schon freigegeben ist oder so
|
Re: Fehler beim Benden
meinst du, enn z.B. ein Objekt, dass beendet wird, auf ein anderes zugreifen will, dass aber schon beendet ist?
|
Re: Fehler beim Benden
wieso postest nicht einfach n bisschen source
|
Re: Fehler beim Benden
Zitat:
|
Re: Fehler beim Benden
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, ich kann ja mal die Hauptunit posten.
|
Re: Fehler beim Benden
ich hab gleich mal ne Kritik:
Delphi-Quellcode:
Wo wird suchbaum etc. wieder freigegeben? Hast du schonmal versucht die anwendung zu debuggen um zu eingrenzen zu können wo der fehler kommt? eventuell liegts ja sogar daran das irgend eine klasse noch arbeitet während die anderen klassen schon zerstört sind...
Constructor TVerwaltung.create;
Begin suchbaum:=TSearchtree.create; Codebaum:=TSearchtree.Create; zeichenanz:=0; Liste:=TListe.create; keylist:=TListe.create; stack:=TLifo.create; End; |
Re: Fehler beim Benden
meinst du mit freigeben zerstören?
Also ich gehe mal davon aus, dass diese objekt alle zerstört werden, wenn TVerwaltung in der Anwendung zerstört wird. oder nicht? Und dieses wird doch da es eine Variabel der mainunit ist automatisch zerstört oder? Und zum debuggen: Ich weiss nicht. Der Fehler triit ja wie gesagt erst auf wenn das programm beendet wird. Zur Laufzeit funktioniert alles wie es soll. |
Re: Fehler beim Benden
Wenn die Anwendung zerstört wird dann werden auch die Objecte zerstört. Allerdings kann die Zugriffsverletzung genau aus diesem grund kommen. Ich würde an deiner stelle lieber noch einen destructor bauen und darin die jeweiligen objecte freigeben. Nur weil ein object im Create angelegt wird, wird dieses nicht beim destroy auch freigegeben (könnte ja schließlich sein das man das object für ein anderes object erstellt)... Also immer schön freigeben...
|
Re: Fehler beim Benden
ok, danke ich werds mal versuchen
|
Re: Fehler beim Benden
mmh, irgendwie hilft mir das alles nichts.
Trotz Destructor bleibt alles beim alten. :wall: |
Re: Fehler beim Benden
hast du mal paar haltepunkte gesetzt damit du weißt an welcher stelle es zu der AV kommt?
|
Re: Fehler beim Benden
wie soll ich denn Haltepunkte setzen? Der Fehler tritt ja erst beim Beenden auf.
|
Re: Fehler beim Benden
in den verschiedenen destructoren, somit weißt du bei welchem destroy...
|
Re: Fehler beim Benden
achso, ich hatte ein TVerwaltung.destroy gemacht, in der die in create aufgerufenen Objecte auch wieder freigegeben wurden. Hat auch geklappt.
Soll ich vielleicht mal das komplete Projekt laden? |
Re: Fehler beim Benden
wie gibst du die den wieder frei, mit free pder destroy ?
|
Re: Fehler beim Benden
poste mal das komplette projekt, dann kann dir bestimmt schneller geholfen werden
|
Re: Fehler beim Benden
Liste der Anhänge anzeigen (Anzahl: 1)
äh, ich habs als letztes mit.free gemacht.
|
Re: Fehler beim Benden
Also viel kann ich dir jetzt ni helfen, das einzige was ich bisher gefunden habe ist das der fehler nur kommt wenn irgendwann mal
Delphi-Quellcode:
in TVerwaltung.huffman aufgerufen wurde. Somit wird irgend eines dieser objecte beim destroy sch**** machen. Eventuell hat da irgend ein Object ein Onchange, und weil beim destory items gelöscht werden wird das aufgerufen und schlegt fehl weil halt irgendwas das im onchange angesprochen wird nicht mehr existiert... also einfach mal alle klassen die hier in dem stück vorkommen debuggen... ich guck auch mal bissl weiter...
Repeat
sortstack; l:=TBintreenode(stack.top).Copy; stack.pop; r:=TBintreenode(stack.top).Copy; stack.pop; inhalt.change; Inhalt.setprob(THuffman(l.Elem).value.wahrscheinlichkeit+THuffman(r.elem).value.wahrscheinlichkeit); node:=TBintreenode.Create(l,THuffman.create(inhalt.value.zeichen,inhalt.value.wahrscheinlichkeit),r); stack.push(node); Until stack.length=1; Codebaum.Root:=TBintreenode(stack.top); |
Re: Fehler beim Benden
ja gut, also dieser Teil wird ja immer mindestens einmal ausgeführt.
Und die anderen Klassen also Treeclss,Listclss usw. die müsste alle 100%ig stimmen. Ich hab im Moment leider auch absolut keine Ahnung meher woran es liegen könnte. Rein logisch betrachtet müsste es ja am destroy liegen. |
Re: Fehler beim Benden
wenn mann keinen text verschlüsselt, also das programm startet und dann gleich wieder schließt kommt kein fehler
|
Re: Fehler beim Benden
das stimmt, es müsste also auf jeden fall an irgendwas liegen, das in TVerwaltung aufgerufen wird.
Ich weiss nicht ob das auch in dem Projekt ist, dass ich hochgeladen habe, aber ich hab mal ein TVerwaltung.destroy gemacht, wo alle Objecte die du auch in create findest, freigegeben werden. naja das TVerwaltung.destroy wird ja dann in btneu.click aufgerufen, und ich habs auch mal ans Ende von jedem Codieren gsetzt. Aber das klappt eigentlich wenn man das mal so durchgeht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz