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: 一時変数のアドレスを外部スコープのシンボルに転送しています