SA0021: Transporte de la dirección de una variable temporal
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 existen solo mientras se procesa la función o el método. Si un puntero apunta a este tipo de variable después de procesar el método o la función, puede usar este puntero para acceder a la memoria indefinida o para acceder a una variable incorrecta en otra función. Esta situación debe evitarse a toda costa.
Importancia: Alta
ejemplo 33. Ejemplo
FUNCTION TempVarInFUNC : DWORD VAR uiTemp : UINT; END_VAR
TempVarInFUNC := ADR(uiTemp); //SA0021
PROGRAM PLC_PRG VAR dwTest : DWORD; END_VAR
dwTest := TempVarInFUNC();
Salida en el Mensajes vista:
SA0021: Transporte de dirección de variable temporal al símbolo de alcance externo