Skip to main content

SA0021 : Transport de l'adresse d'une variable temporaire

Détecte les affectations d'adresses de variables temporaires (sur la pile) à des variables non temporaires

Justification : Les variables locales d'une fonction ou d'une méthode sont créées sur la pile et elles n'existent que pendant le traitement de la fonction ou de la méthode. Si un pointeur pointe vers ce type de variable après le traitement de la méthode ou de la fonction, vous pouvez utiliser ce pointeur pour accéder à une mémoire indéfinie ou pour accéder à une variable incorrecte dans une autre fonction. Cette situation doit être évitée à tout prix.

Importance : Élevée

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

Sortie dans le messages voir:

  • sa_icon_message.png SA0021 : Transport de l'adresse de la variable temporaire vers le symbole de portée externe