Skip to main content

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:

  • sa_icon_message.png SA0021: Transporte de dirección de variable temporal al símbolo de alcance externo