AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[FM] Free auf nil wird zu self.free

Ein Thema von Darlo · begonnen am 1. Mär 2012 · letzter Beitrag vom 2. Mär 2012
Antwort Antwort
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: [FM] Free auf nil wird zu self.free

  Alt 1. Mär 2012, 14:11
Der Compiler der die Anwendung erzeugt ist der gleiche. Was sollte da anders sein?
Unter VCL kommt eine Exception

Nur um das zu betonen, ich wollte das Verhalten verstehen, dass hier ein Programmierfehler vorliegt ist klar.
Gruß
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: [FM] Free auf nil wird zu self.free

  Alt 1. Mär 2012, 14:32
Der Compiler der die Anwendung erzeugt ist der gleiche. Was sollte da anders sein?
Unter VCL kommt eine Exception
Das was anders kommst hast du ja geschrieben. Aber bei VCL und FM wird ja der gleiche Compiler genommen. Und auf dieser unteren ebene weiß der Compiler ja nichts mehr davon jetzt VCL oder FM vor sich zu haben. Also kann es eigentlich nur zufall sein was passiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.679 Beiträge
 
Delphi 12 Athens
 
#3

AW: [FM] Free auf nil wird zu self.free

  Alt 1. Mär 2012, 15:44
Ein Pointer ist auch nichts anderes als ein 4 oder 8 Byte großer Speicherbereich, dessen Inhalt als Speicheradresse (in diesem Fall einer TStringList-Instanz) interpretiert wird. Da bis zum Aufruf von sl.Free noch kein korrekter Inhalt in diesen Speicherbereich verbracht wurde (z.B. durch ein sl := TStringList.Create ), befinden sich darin eben noch die Bits, die irgendwie vorher von einem anderen Prozeduraufruf drin gestanden haben (z.B. dein Geburtsdatum oder die Größe deiner Festplatte oder die Speicheradresse von Button2).

Wenn man jetzt diesen zufälligen Speicherinhalt als Speicheradresse einer TStringList interpretiert, dann liegt diese Adresse mit hoher Wahrscheinlichkeit nicht im erlaubten Adressraum des aktuellen Prozesses und führt zu einer Schutzverletzung.

Wenn es sich aber zufällig um die Adresse von Button2 handelt, dann ist das sehr wohl eine gültige Adresse. Da Free für alle Objekt-Instanzen das selbe tut, führt der Aufruf von sl.Free in diesem Fall eben zur Freigabe von Button2.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

AW: [FM] Free auf nil wird zu self.free

  Alt 1. Mär 2012, 16:04
Mir scheint es, dass nicht initialisierte lokale Variablen unter FM
stets auf den Sender der Procedure zeigen, da... button2 verschwinden läßt.
Das ist wirklich merkwürdig, denn die lokale Variable liegt auf dem Stack ÜBER dem Wert von 'Sender'. Bin mir nicht sicher, aber da ist glaub ich auch noch eine Rücksprungadresse dazwischen.

'sl' zeigt also wirklich auf das, was vorher einmal auf dem Stack stand. vielleicht ist das ja der Button, nur liegt das dann nicht am Sender, sondern vermutlich an der Click-Verarbeitung der Button-Komponente.

Wenn sich hier nun die VCL und FM unterscheiden (wovon auszugehen ist), wäre das eine Erklärung
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#5

AW: [FM] Free auf nil wird zu self.free

  Alt 1. Mär 2012, 16:47
Delphi optimiert diese Objekt-variable weg.
Diese wird ja nur an einer Stelle verwendet, weswegen sie direkt in den Registern liegen kann.
z.B. in EAX
Jetzt kommt es darauf an, wofür vorher dieses EAX verwendet wurde
und schon hat man das in dieser Variable, was gerade in diesem EAX drinsteht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: [FM] Free auf nil wird zu self.free

  Alt 2. Mär 2012, 09:12
@Himitsu, Iwo Asnet, Uwe Raabe

Danke jetzt hab ichs verstanden.

Gruß
Philip
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 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