Beitrag
von Xel66 » 26.11.2015, 15:17
Ich habe noch eine weitere Theorie zu dem Variablen-Thema. Ich vermute, hier begegenen wir einem alten Bekannten, dem Buffer-Overflow. Meiner Meinung nach reserviert das System für Systemvariablen und auch für Script-interne Variablen bestimmte Speicherbereiche entsprechend des Variablentyps. Diese Variablen behalten vermutlich ihren Wert bei, bis sie durch ein anderes Script geändert werden. Das funktioniert wahrscheinlich solange ganz gut, bis irgend ein Script auf eine Variable "xy", das im Script "A" diese Variable "xy" als z.B. boolsch deklariert hat, zugreift und dort einen String reinschreiben will. Da man für unterschiedliche Variablentypen auch unterschiedlichen Platz braucht (eine boolsche Variable, die nur zwei Zustände kennt, braucht weniger Platz als eine Integer-Variable, und diese vermutlich viel weniger als eine String-Variable), kann es schnell zum Überschreiben von Speicherbreichen kommen. Wenn der Programmierer hier nicht vorgesorgt hat, und eine Fehlerbehandlungsroutine eingebaut hat, die die Variablen vorher prüft und eine (aussagekräftige) Fehlermeldung ausgibt, kommt es zum Crash.
Dem könnte man z.B. begegnen, indem man auch den Script-Variablen, wie früher empfohlen, aussagekräftige Namen gibt. Als Beispiel unterscheidet sich die boolsche Variablen "b_Anwesenheit", die die Zustände WAHR und FALSCH annehmen kann, von der Stringvariable "s_Anwesenheit" in der man z.B. den Namen des Anwesenden hinterlegen könnte. Scripte würde hier ausreichend unterschiedliche Namen vorfinden und es würde nicht zu Problemen kommen. Würden zwei Scripte nun im Gegensatz die Variable "Anwesenheit" benutzen hat das Script, was die String-Variable benutzt ein Problem, wenn ein anders die Variable mit gleichem Namen als "boolsch" initialisiert hat.
Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch