Hilfe zu ADR()

explorer42

Level-2
Beiträge
24
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

in der Codesys hilfe gibt es folgenden Hinweis für den Adressoperatoren bzw. für Pointer TO Variabeln:
1722597189011.png
HINWEIS: POINTER TO-Variablen von Funktionen und Methoden sollten nicht an den Aufrufer zurückgegeben oder globalen Variablen zugewiesen werden.

Was ist damit genau gemeint? Darf man jetzt z.B. für Methoden keine Rückgabewert mit z.B. POINTER TO REAL verwenden ?

Vielen Dank.
 
Es geht darum, wenn Du einen Pointer auf eine interne Variable einer Funktion erstellst.
Mit Beendigung der Funktion werden alle Variablen ja ungültig, da es sich um eine Funktion und keinen Funktionsblock handelt.
Damit werden auch alle Zeiger ungültig. Sie können natürlich noch verwendet werden, weil sie ja nur auf Adressen zeigen, aber dann fängt man an, wild mit Zeigern im Speicher rumzuschießen. Es sind dann im Normalfalle keine gültigen Operationen damit möglich.
Um zu verhindern, daß man versehentlich mit solchen ungültigen Zeigern arbeitet, soll man die eben nicht an den Aufrufer zurückgeben oder global speichern.
 
Das sollte gehen, da die referenzierte Variable ja zu jeder Zeit im Programm verfügbar ist, da sie aus einem FB kommt.
Vorsichtig muß man bei solchen Konstrukten dann mit Änderungsladen sein, da sich beim Änderungsladen die Speicherbereiche verschieben können und somit der Pointer ggf. nicht mehr auf die korrekte Variable verweist. Je nachdem, ob er vor der Verwendung jedes Mal neu ermittelt wird oder ob er dann über mehrere Zyklen gültig sein soll.
 
Zurück
Oben