SA0145: Mögliche Verwendung nicht initialisierter Referenzen
Funktion | Ermittelt alle verwendeten Referenzvariablen, die möglicherweise vor der Verwendung nicht initialisiert werden und nicht durch den Operator __ISVALIDREF überprüft wurden. Diese Regel wird im Implementierungsteil von POUs angewendet. |
Begründung | Eine Referenz sollte vor dem Zugriff auf Gültigkeit geprüft werden, weil es sonst beim Zugriff zur Laufzeit zu einer Zugriffsverletzung ("Access Violation") kommen kann. |
Wichtigkeit | Hoch |
Beispiele:
FUNCTION_BLOCK FB_Test
VAR_INPUT
pStruct : POINTER TO ST_Test;
refStruct : REFERENCE TO ST_Test;
END_VAR
VAR
bPointer : BOOL := pStruct^.bTest; // => SA0124: Dereference access in initialization
bRef : BOOL := refStruct.bTest; // => SA0125: Reference used in initialization
END_VARbPointer := pStruct^.bTest; // => SA0039: Possible null pointer dereference 'pStruct^'
bRef := refStruct.bTest; // => SA0145: Possible use of not initialized reference 'refStruct'
IF pStruct <> 0 THEN
bPointer := pStruct^.bTest; // no error SA0039 as the pointer is checked for unequal 0
END_IF
IF __ISVALIDREF(refStruct) THEN
bRef := refStruct.bTest; // no error SA0145 as the reference is checked via __ISVALIDREF
END_IFÜberblick über die Regeln zum Thema „Dereferenzierung“
Pointer | |
|---|---|
Dereferenzierung von Pointern im Deklarationsteil | |
Mögliche Null-Pointer-Dereferenzierung im Implementierungsteil | |
Referenzen | |
|---|---|
Verwendung von Referenzen im Deklarationsteil | |
Mögliche Verwendung nicht initialisierter Referenzen im Implementierungsteil | SA0145: Mögliche Verwendung nicht initialisierter Referenzen |
Schnittstellen | |
|---|---|
Mögliche Verwendung nicht initialisierter Schnittstellen im Implementierungsteil | SA0046: Mögliche Verwendung nicht initialisierter Schnittstellen |