![]() |
Variable wird gelöscht
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 |
AW: Variable wird gelöscht
Nimm mal testhalber statt einer Variablen eine Konstante.
|
AW: Variable wird gelöscht
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:
|
AW: Variable wird gelöscht
Jupp, kann so leicht mal passieren, dass jemand ausversehn diese Variable erwischt, wenn es überall im Programm noch mehrere andere Variablen A gibt. :stupid:
|
AW: Variable wird gelöscht
Es könnte ja auch sein, daß in der Nachbarschaft die Begrenzung nicht eingehalten wird?
Gruß K-H |
AW: Variable wird gelöscht
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 ??? |
AW: Variable wird gelöscht
Zitat:
Hast du denn z.B. mal den Datenhaltepunkt versucht? |
AW: Variable wird gelöscht
Zitat:
|
AW: Variable wird gelöscht
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? |
AW: Variable wird gelöscht
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.] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 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