Rileva l'assegnazione di indirizzi di variabili temporanee (sullo stack) a variabili non temporanee.
Giustificazione: Le variabili locali di una funzione o di un metodo vengono create sullo stack ed esistono solo durante l'elaborazione della funzione o del metodo. Se un puntatore punta a questo tipo di variabile dopo l'elaborazione del metodo o della funzione, è possibile utilizzare questo puntatore per accedere alla memoria non definita o per accedere a una variabile errata in un'altra funzione. Questa situazione deve essere evitata a tutti i costi.
Importanza: Alto
Esempio
FUNCTION TempVarInFUNC : DWORD VAR uiTemp : UINT; END_VAR TempVarInFUNC := ADR(uiTemp); // SA0021 PROGRAM PLC_PRG VAR dwTest : DWORD; END_VAR dwTest := TempVarInFUNC(); --> SA0021: Transporting address of temporary variable to outer scope symbol