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
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:
SA0021 : Transport de l'adresse de la variable temporaire vers le symbole de portée externe