SA0021: Weitergabe der Adresse einer temporären Variablen
Funktion | Ermittelt Zuweisungen von Adressen von temporären Variablen (Variablen auf dem Stack) zu nicht-temporären Variablen. |
Begründung | Lokale Variablen einer Funktion oder einer Methode werden auf dem Stack angelegt und existieren nur während der Abarbeitung der Funktion oder Methode. Zeigt ein Pointer nach Abarbeitung der Methode oder Funktion auf eine solche Variable, dann kann über diesen Pointer in undefinierten Speicher gegriffen, oder auf eine falsche Variable in einer anderen Funktion zugegriffen werden. Diese Situation ist in jedem Fall zu vermeiden. |
Wichtigkeit | Hoch |
Beispiel:
Methode FB_Sample.SampleMethod:
METHOD SampleMethod : XWORD
VAR
fVar : LREAL;
END_VARSampleMethod := ADR(fVar);Programm MAIN:
PROGRAM MAIN
VAR
nReturn : XWORD;
fbSample : FB_Sample;
END_VARnReturn := fbSample.SampleMethod(); // => SA0021