SA0021:传输临时变量的地址
检测临时变量(在堆栈上)到非临时变量的地址分配
理由:函数或方法的局部变量是在堆栈上创建的,它们仅在处理函数或方法时才存在。如果一个指针在处理完方法或函数后指向这种变量,那么你可以使用这个指针访问未定义的内存,或者访问另一个函数中不正确的变量。应不惜一切代价避免这种情况。
重要性:高
例 33. 例子
FUNCTION TempVarInFUNC : DWORD VAR uiTemp : UINT; END_VAR
TempVarInFUNC := ADR(uiTemp); //SA0021
PROGRAM PLC_PRG VAR dwTest : DWORD; END_VAR
dwTest := TempVarInFUNC();
输出在 留言 看法:
SA0021:将临时变量的地址传输到外部作用域符号