Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
    destructor destroy;					

mit
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mi 28.08.13 21:45 
Gratulation zur Ausgrabung :mrgreen:. 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 28.08.13 21:52 
Hallo,
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
public
  destructor Destroy; override; 
end;

dürfte helfen.

Danke. Jetzt ist es ok.

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
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. :evil:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 29.08.13 00:02 
Hihi. Ich hatte ja auf die andere Frage (aus einer PN) gehofft, die ist nämlich wirklich interessant ;-)

user profile iconBenBE'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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Do 29.08.13 09:13 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Aber gut, dass Martok nochmal für sechs Jahre alten Code Schelte kriegt...

Wenn meine Anfrage so aufgenommen wird, dann vergesst es. :?


von meiner Seite ein ganz klares nein!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 29.08.13 10:00 
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Do 29.08.13 15:09 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
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.


Gerade nochmal getestet, stimmt da hast du recht. Frag mich nur warum ich das so im Kopf hatte..
Einloggen, um Attachments anzusehen!
_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht