Skip to main content

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

Beispiel 33. Beispiel
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:

  • sa_icon_message.png SA0021: Adresse einer temporären Variable wird auf ein Symbol übertragen, das außerhalb des gültigen Bereichs liegt