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_VAR
dwTest := TempVarInFUNC();
Uscita in Messaggi vista:
SA0021: Trasporto dell'indirizzo della variabile temporanea al simbolo dell'ambito esterno