PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Local-Variablen werden nach Beenden der Sub nicht gelöscht?



Thomas E.
15.09.2013, 19:40
Hallo!


Ich habe folgende Sub, die periodisch in der Main alle Sekunde aufgerufen wird:


Sub Glcd_process_update

Local String_temp As String * 2
Local Timestring As String * 8
Local Datestring As String * 8


If Global_glcd_mask = 0 Then

'switch do big font
Setfont My12_16

'get timestring
String_temp = Str(global_timedate_hour)
String_temp = Format(string_temp , "00")
Timestring = Timestring + String_temp
Timestring = Timestring + Global_doublepoint

String_temp = Str(global_timedate_min)
String_temp = Format(string_temp , "00")
Timestring = Timestring + String_temp
Timestring = Timestring + Global_doublepoint

String_temp = Str(global_timedate_sec)
String_temp = Format(string_temp , "00")
Timestring = Timestring + String_temp

'write timestring
Lcdat 1 , 1 , Timestring , 0

'Delete Strings
String_temp = ""
Timestring = ""
Datestring = ""


End If


End Sub


Das lustige daran ist: Wenn ich den Abschnitt unter "Delete Strings" rausnehme, dann hängt er mir an der letzten Uhrzeit die aktuelle Uhrzeit an. Ich dachte immer, lokale Variablen werden nach Rückkehr zur Main gelöscht?

for_ro
15.09.2013, 21:16
Hallo Thomas,
schau dir mal die Hilfe zu "LOCAL" an:
Notice that a LOCAL variable is not initialized. It will contain a value that will depend on the value of the FRAME data. So you can not assume the variable is 0. If you like it to be 0, you need to assign it.
Das war schon immer so. Da man der Variable meistens einen Wert zuweist, fällt das nicht auf.

Thomas E.
16.09.2013, 10:11
Hallo!


Vielen Dank für deine Antwort. Mir ist das tatsächlich noch nie aufgefallen. Können die in einer anderen Sub überschrieben werden oder haben die immer ihren eindeutigen Speicherbereich?

for_ro
16.09.2013, 13:35
Der belegte Speicher für die lokalen Variablen wird beim Verlassen der Sub oder Function wieder freigegeben. Wenn eine andere Sub aufgerufen wird, können diese Speicherzellen nun wieder verwendet und damit überschrieben werden.

Thomas E.
16.09.2013, 18:38
Der belegte Speicher für die lokalen Variablen wird beim Verlassen der Sub oder Function wieder freigegeben. Wenn eine andere Sub aufgerufen wird, können diese Speicherzellen nun wieder verwendet und damit überschrieben werden.
Also gefährlich, das so zu verwenden. Alles klar, danke für die Info!

peterfido
17.09.2013, 19:01
Wieso gefährlich? Der Sinn dahinter ist, dass wenn das RAM knapp wird, sich mehrere Subs Speicherbereiche zum Zwischenspeichern, z.B. für Rechnungen / Zwischenergebnissen, teilen. Nach dem verlassen der Sub gibt es keine Gewähr, dass der Wert erhalten bleibt. Soll beim späteren Aufruf der Sub mit dem letzten Wert weitergearbeitet werden, dann ist auf globale Variablen zu setzen.