Skip to main content

SA0021:传输临时变量的地址

检测临时变量(在堆栈上)到非临时变量的地址分配

理由:函数或方法的局部变量是在堆栈上创建的,它们仅在处理函数或方法时才存在。如果一个指针在处理完方法或函数后指向这种变量,那么你可以使用这个指针访问未定义的内存,或者访问另一个函数中不正确的变量。应不惜一切代价避免这种情况。

重要性:高

33. 例子
FUNCTION TempVarInFUNC : DWORD
VAR
    uiTemp : UINT;
END_VAR
TempVarInFUNC := ADR(uiTemp);    //SA0021
PROGRAM PLC_PRG
VAR
    dwTest : DWORD;
END_VAR
dwTest := TempVarInFUNC();

输出在 留言 看法:

  • sa_icon_message.png SA0021:将临时变量的地址传输到外部作用域符号