SA0021: Trasferimento dell'indirizzo di una variabile temporanea
Recupera le assegnazioni di indirizzi di variabili temporanee (variabili nello stack) a variabili non temporanee.
Motivo: le variabili locali di una funzione o di un metodo vengono create nello stack ed esistono solo durante l'elaborazione della funzione o del metodo. Se un puntatore punta a una tale variabile dopo che il metodo o la funzione è stato elaborato, è 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 in ogni caso.
Importanza: Alta
FUNCTION TempVarInFUNC : DWORD
VAR
uiTemp : UINT;
END_VAR
TempVarInFUNC := ADR(uiTemp); //SA0021
PROGRAM PLC_PRG
VAR
dwTest : DWORD;
END_VARdwTest := TempVarInFUNC();
Uscita in Messaggi vista:
SA0021: Trasporto dell'indirizzo della variabile temporanea al simbolo dell'ambito esterno