Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 28.08.13 20:12
Hallo,
jetzt hole ich auch mal ein altes Thema wieder hervor.
Beim Stöbern in der EE bin ich auf Martoks Brainfuck-Interpreter gestoßen, der mich gleich begeistert.
Das Konzept von Brainfuck kannte ich noch nicht und finde es einfach genial.
Beim ersten Ausprobieren bin ich auf Speicherlecks gestoßen. Daraufhin habe ich in der TBF-Klasse
Delphi-Quelltext
mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| destructor TBF.destroy; begin Setlength(Daten,0); Setlength(Stack,0); inherited destroy; end; |
eingefügt. Es gibt zwar keinen Laufzeitfehler, aber es bringt auch gar nichts. Offensichtlich habe ich das destructor-Prinzip nicht verstanden.
Die Warnung des Compilers lautet:
Zitat: | [Warnung] bfcore.pas(33): Methode 'Destroy' verbirgt virtuelle Methode vom Basistyp 'TObject'
|
Kann jemand helfen? Danke.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Zuletzt bearbeitet von Mathematiker am Mi 28.08.13 21:16, insgesamt 2-mal bearbeitet
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mi 28.08.13 21:45
Gratulation zur Ausgrabung . Ich schlage vor, das hier vorher abzutrennen und in ein neues Thema zu verschieben, aber das soll ein Moderator entscheiden.
Die Antwort auf deine Frage:
Delphi-Quelltext 1: 2: 3:
| public destructor Destroy; override; end; |
dürfte helfen.
Aber gut, dass Martok nochmal für sechs Jahre alten Code Schelte kriegt...
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 28.08.13 21:52
Hallo,
FinnO hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3:
| public destructor Destroy; override; end; |
dürfte helfen.
|
Danke. Jetzt ist es ok.
FinnO hat folgendes geschrieben : | Aber gut, dass Martok nochmal für sechs Jahre alten Code Schelte kriegt... |
Wenn meine Anfrage so aufgenommen wird, dann vergesst es.
Für mich ist es damit erledigt.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Do 29.08.13 00:02
Hihi. Ich hatte ja auf die andere Frage (aus einer PN) gehofft, die ist nämlich wirklich interessant
BenBE's Additions-Programm hängt sich zwischendurch auf, in der hier geposteten Version ist das Zeile 26. Das Subversion von damals gibt's nicht mehr, ich werde das bei Gelegenheit mal in ein Git-Repo werfen, damit das nicht verloren geht. Wäre schon mal interessant zu wissen, woran das liegt
Edit: und warum ich eigentlich geantwortet hab: seltsam, dass das hilft. Eigentlich werden Felder doch automatisch abgeräumt... oder war das in D5 noch nicht?
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
glotzer
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Do 29.08.13 01:08
Ja normalerweiße werden sie das, aber NICHT wenn sie per "Hand" angelegt wurden (mit setLength)
Edit: DAS IST FALSCH! Danke an jaenicke
_________________ ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
Zuletzt bearbeitet von glotzer am Do 29.08.13 15:21, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: Martok
|
|
Lemmy
Beiträge: 792
Erhaltene Danke: 49
Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
|
Verfasst: Do 29.08.13 09:13
|
|
jaenicke
Beiträge: 19274
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 29.08.13 10:00
glotzer hat folgendes geschrieben : | Ja normalerweiße werden sie das, aber NICHT wenn sie per "Hand" angelegt wurden (mit setLength) |
Tut mir leid, aber das ist falsch, ein Array wird automatisch freigegeben. Die Länge des Arrays ist ja auch bekannt, genau diesen Wert setzt ja SetLength auch.
SetLength auf 0 bringt rein gar nichts. Entweder sind darin einfache Datentypen, dann kann man es sich sparen oder darin sind Objekte, dann muss man die freigeben. Aber auch bei Objekten braucht man nach deren Freigabe kein SetLength auf 0 mehr.
|
|
glotzer
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Do 29.08.13 15:09
Einloggen, um Attachments anzusehen!
_________________ ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
|
|
|