Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit Desctructor
Mike_C - Sa 25.10.03 14:36
Titel: Problem mit Desctructor
Hi
ich weiß nicht genau, wo mein Problem hingehört, deshalb poste ich es hier rein...
Mein Prob ist folgendes:
ich habe versucht mir einen "Compiler" für eine eigene Script-Sprache zu schreiben. Dazu habe ich eine Klasse TCompiler entworfen, die Aufgaben wie debuggen und Script ausführen übernehmen soll. Der eigentliche Debug-Vorgang funktioniert auch, aber wenn ich den Destructor der Klasse aufrufe, stürtz das Programm mit einer AccessViolation ab.
Mein Descturctor soll nichts weiter machen, als 2 StringLists "zerstören", also deren Destructor aufzurufen.
Daher sieht der Destructor so aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| destructor TCompiler.Destroy; begin TempScript.Free; FErrorMessages.Free; inherited; end; |
Der Aufruf der Compiler-prozeduren zum Debuggen sieht so aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TFormMain.DebugScript1Click(Sender: TObject); var Compiler: TCompiler; AScript: TStringList; begin AScript := TStringList.Create; AScript.Text := Memo1.Text; Compiler := TCompiler.Create; Compiler.CacheScript(AScript); Compiler.Debug; MemoErrors.Text := Compiler.ErrorMessages.Text; Compiler.Free; AScript.Free; end; |
Die Frage ist, warum die AccessViolation auftritt...
Wenn ihr den kompletten Quelltext dazu braucht, schreibt mir bitte eine Mail an
michael_kirches@gmx.de, dann kann ich euch das zuschicken. Für's Forum ist das glaube ich zu lang.
Gruß
Mike_C
Anonymous - Sa 25.10.03 14:40
Mir fällt spontan folgendes ein:
1. Eine Stringliste ist nicht ersteltt
2. Im der Klasse wird TempScript AScript zugewiesen, was dazu führt dass AScript 2x freigegeben wird.
Am Quelltext erkenne ich keine Fehler
UC-Chewie - Sa 25.10.03 14:41
Lass mal das inherited aus dem Konstruktor raus.
Und prüf vor dem Zerstören der Stringlisten, ob sie nicht schon freigegeben worden sind.
Mike_C - Sa 25.10.03 14:48
| obbschtkuche hat folgendes geschrieben: |
Im der Klasse wird TempScript AScript zugewiesen, was dazu führt dass AScript 2x freigegeben wird.
|
Also entweder lag es wirklich daran, dass AScript 2 mal freigegeben wurde oder am
inherited im Destructor. Mir ist dabei nur nicht ganz klar, warum die Klasse auch ohne das inherited normal "freigegeben" wird. rufe ich mit
inherited nicht normalerweise die überladene Funktion der Elternklasse auf?
danke auf jeden fall
AndyB - Sa 25.10.03 15:21
Wenn deine Klasse TCompiler nicht von TObject abgeleitet ist, hast du ohne das inherited ein Speicherleck aufgemacht. Da du den Speicher nicht freigibst, kann da auch keine AV auftreten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!