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_VAR
SampleMethod := ADR(fVar);

Programm  MAIN:

PROGRAM MAIN
VAR
    nReturn   : XWORD;
    fbSample  : FB_Sample;
END_VAR
nReturn := fbSample.SampleMethod();                 // => SA0021