Detecta asignaciones de direcciones de variables temporales (en la pila) a variables no temporales
Justificación: Las variables locales de una función o método se crean en la pila y sólo existen mientras se procesa la función o método. Si un puntero apunta a este tipo de variable después de procesar el método o función, entonces puede utilizar este puntero para acceder a memoria indefinida, o para acceder a una variable incorrecta en otra función. Esta situación debe evitarse a toda costa.
Importancia: Alta
Ejemplo
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