SA0021: Transporting the address of a temporary variablePermalink

Detects address assignments of temporary variables (on the stack) to non-temporary variables

Justification: Local variables of a function or method are created on the stack and they exist only while the function or method is being processed. If a pointer points to this kind of variable after processing the method or function, then you can use this pointer to access undefined memory, or to access an incorrect variable in another function. This situation should be avoided at all costs.

Importance: High

Example

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