AGB  ·  Datenschutz  ·  Impressum  







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

Kein Zugriff auf Private Variablen

Ein Thema von Purri · begonnen am 25. Okt 2017 · letzter Beitrag vom 26. Okt 2017
Antwort Antwort
Purri

Registriert seit: 18. Nov 2010
13 Beiträge
 
Delphi XE5 Professional
 
#1

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 11:45
Ok, ich verstehe was ihr meint, aber nicht warum das so ist.

Ich habe jetzt das FreeAndNil durch
Delphi-Quellcode:
  gThreadManager.Free;
  gThreadManager := nil;
ersetzt. nun klappt es.

Danke.

Zum Verständnis:
Ich befinde mich doch eigentlich immer noch im Destructor vom ThreadManager, also dürfte er doch nicht schon weg sein? Ein Blick in den FreeAndNil-Code zeigt: Zuerst wird := nil gesetzt und erst danach .Free aufgerufen.... Ich fühle mich von Delphi verar**** So isses doch wohl eher NilAndFree

Gibt es einen guten Grund, warum diese Reihenfolge ausgeführt wird?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 12:04
Deine Instanz des ThreadManager existiert zu diesem Zeitpunkt noch. Nur der globale Zeiger "gThreadManager" auf diese Intstanz zeigt bereits auf nil. Zugriffe über nil-Pointer löst Zugriffsverletzung aus.
  Mit Zitat antworten Zitat
Purri

Registriert seit: 18. Nov 2010
13 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 12:08
Danke Blub,
das habe ich verstanden und schon geändert. Ich frage mich nur noch, warum FreeAndNil zuerst den Zeiger löscht und dann die Instanz, anstatt es andersrum zu machen, wie ja auch der Name es vermuten lässt.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 12:35
Zu dem Sinn und Unsinn von FreeAndNil gibt es dutzende Diskussionen. Einige sagen, man sollte es oft verwenden, andere nie. Und ich glaube beide haben Recht
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 17:26
Zu dem Sinn und Unsinn von FreeAndNil gibt es dutzende Diskussionen. Einige sagen, man sollte es oft verwenden, andere nie. Und ich glaube beide haben Recht
Kommt definitiv immer auf den konkreten Fall an.
  • Geht es um eine Klasseninstanz, die ausschließlich lokal in einer Funktion verwendet (und erstellt) wird, kann man sich das FreeAndNil fast immer sparen und nur Free aufrufen, da die Variable nach dem Verlassen der Funktion eh aus dem Scope läuft/vom Stack entfernt wird.
  • Bei globalen Instanzen kommt es drauf an, ob die Instanz dynamisch (bei bestimmten Aktionen) erstellt und freigegeben wird (und das Vorhandensein über einen <> nil Check umgesetzt wird).

FreeAndNil "nur so" zu verwenden, weil man das Gefühl hat, dann ordentlich aufgeräumt zu haben, ist nur unnötiger Overhead.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kein Zugriff auf Private Variablen

  Alt 26. Okt 2017, 11:19
FreeAndNil "nur so" zu verwenden, weil man das Gefühl hat, dann ordentlich aufgeräumt zu haben, ist nur unnötiger Overhead.
Mag sein. Aber sicherer unnötiger Overhead Ich verwende praktisch gar kein .Free mehr sondern nur noch FreeAndNil . Das hat dazu geführt, dass if Assigned wesentlich zuverlässigerer geworden ist. Ich würde daher vielmehr sagen, ob FreeAndNil sinnvoll ist oder nicht hängt maßgeblich vom eigenen Codedesign ab. Darüber zu streiten ist in etwa so sinnvoll wie die Frage, ob nun nach Rechts oder nach Links gebogene Bananen besser schmecken
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  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 06:06 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 by Thomas Breitkreuz