SA0021: Weitergabe der Adresse einer temporären Variable
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. Wenn ein Pointer nach Abarbeitung der Methode oder Funktion auf eine solche Variable zeigt, dann kann man über diesen Pointer in undefinierten Speicher greifen, oder auf eine falsche Variable in einer anderen Funktion zugreifen. Diese Situation ist in jedem Fall zu vermeiden.
Wichtigkeit: Hoch
FUNCTION TempVarInFUNC : DWORD VAR uiTemp : UINT; END_VAR
TempVarInFUNC := ADR(uiTemp); //SA0021
PROGRAM PLC_PRG VAR dwTest : DWORD; END_VAR
dwTest := TempVarInFUNC();
Ausgabe unter Ansicht Meldungen:
SA0021: Adresse einer temporären Variable wird auf ein Symbol übertragen, das außerhalb des gültigen Bereichs liegt