SA0021: Trasporto dell'indirizzo di una variabile temporaneaPermalink

Rileva l'assegnazione di indirizzi di variabili temporanee (sullo stack) a variabili non temporanee.

Giustificazione: Le variabili locali di una funzione o di un metodo vengono create sullo stack ed esistono solo durante l'elaborazione della funzione o del metodo. Se un puntatore punta a questo tipo di variabile dopo l'elaborazione del metodo o della funzione, è 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 a tutti i costi.

Importanza: Alto

Esempio

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