AGB  ·  Datenschutz  ·  Impressum  







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

Variable wird gelöscht

Ein Thema von tomkupitz · begonnen am 29. Apr 2017 · letzter Beitrag vom 30. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
tomkupitz

Registriert seit: 26. Jan 2011
341 Beiträge
 
Delphi 12 Athens
 
#1

Variable wird gelöscht

  Alt 29. Apr 2017, 15:26
Hallo,

ich habe eine globale Variable a, der bei Programmstart (im initialization Abschnitt einer Unit1) ein Pfad zugewiesen wird. Bei Programmende wird diese Variable a im finalization Abschnitt dieser Unit1 nochmals gebraucht, um bestimmte Daten zu speichern. Binde ich nun (in einer anderen Unit2) über uses eine bestimmte Unit3 ein, ist die globale Variable a im genannten finalization Abschnitt leer, ohne das eine Zuweisung erfolgt ist. Lasse ich beschriebene uses Unit3 Zuweisung in Unit2 weg, enthält a am Ende auch wieder den zugewiesenen Pfad.

Klingt kompliziert. Ich hoffe trotzdem, dass es nachvollziehbar ist. Die zugehörigen Quellen kann ich hier nicht veröffentlichen.

Kennt jemand ein solches Verhalten? Kann es mit überkreuzten Bezügen zusammenhängen?

Danke und beste Grüße
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Variable wird gelöscht

  Alt 29. Apr 2017, 15:55
Nimm mal testhalber statt einer Variablen eine Konstante.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Variable wird gelöscht

  Alt 29. Apr 2017, 19:25
Globale Variablen sind eben meistens keine gute Idee...
Eben unter anderem weil sie jeder von überall modifizieren kann ohne dass es einen Setter gibt, auf den man einen Haltepunkt setzen kann.

Um herauszufinden wann und wodurch die Variable geändert wird, gibt es zwei einfache Möglichkeiten:
  • Umbenennen und beim Kompilieren alle Fehlerstellen prüfen
  • Einen Haltepunkt auf die Zuweisung der Variablen setzen und das Programm im Debugger starten. Wenn das Programm dort ankommt, in der Liste der Haltepunkte einen Datenhaltepunkt auf die Variable setzen. Dann hält das Programm an, wenn diese modifiziert wird.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Variable wird gelöscht

  Alt 29. Apr 2017, 20:04
Jupp, kann so leicht mal passieren, dass jemand ausversehn diese Variable erwischt, wenn es überall im Programm noch mehrere andere Variablen A gibt.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Variable wird gelöscht

  Alt 29. Apr 2017, 21:04
Es könnte ja auch sein, daß in der Nachbarschaft die Begrenzung nicht eingehalten wird?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
341 Beiträge
 
Delphi 12 Athens
 
#6

AW: Variable wird gelöscht

  Alt 30. Apr 2017, 14:53
Mache ich eine völlig neue Variable b auf, kopiere zu Progstart b:=a;, dann ist b am Ende auch leer.

Auch interessant:

uses Unit3, Unitx; //a und b leer am Ende

uses Unitx, Unit3; //a und b behalten Pfade

Compiler Bug ???
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Variable wird gelöscht

  Alt 30. Apr 2017, 15:47
Compiler Bug ???
Möglich, aber sehr sehr unwahrscheinlich. Zumal die Verwendung globaler Variablen nicht gerade ein Zeichen sauberen Quelltextes ist und ich somit erst recht auf deinen Quelltext als Ursache tippe.

Hast du denn z.B. mal den Datenhaltepunkt versucht?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
341 Beiträge
 
Delphi 12 Athens
 
#8

AW: Variable wird gelöscht

  Alt 30. Apr 2017, 16:03
Zitat:
Hast du denn z.B. mal den Datenhaltepunkt versucht?
Habe ich. Variable ist nach allen Form Destroy's noch ok. Erst im finalization ist a leer.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Variable wird gelöscht

  Alt 30. Apr 2017, 17:15
Falls deine Unit eine Form enthält, dann könnest du das Speichern von Dingen doch auch anderswo unterbringen?

( initialization und finalization würde ich nicht mit solchen Dingen "belasten". )

Falls nicht du nicht irgendwo in einer der units den Variablen A und B leer zuweist, dann tönt das interessant... Breakpoints gesetzt und gecheckt, ob du A und B veränderst?
Michael Gasser
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Variable wird gelöscht

  Alt 30. Apr 2017, 18:16
Hab's rasch gescheckt in XE4, XE6 und Tokyo. Das Verhalten ist immer gleich.

Eine globale Variable wird direkt nach dem finalization Teil der unit. in welcher sie definiert ist geleert.

Wenn du also eine unit1 hast mit einer var a und zum Projekt eine unit2 hinzufügst mit einer var b und das Programm laufen lässt, dann wird unit2 initialisiert, dann unit1 - beim Beenden unit1 finalisiert und dann unit2.
Du kannst bereits im Initialisierungsteil von unit2 a einen Wert zuweisen, aber:

Wenn du im finalization Teil von unit2 auf a zugreifst, dann ist a leer.


[Speichere doch deine Dinge im DestroyForm des Hauptfensters oder sonst irgendwo... , wo noch alle Werte vorhanden sind.]
Michael Gasser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz