SA0046: Mögliche Verwendung nicht initialisierter Schnittstellen

Funktion

Ermittelt die Verwendung von Schnittstellen, die vor der Verwendung möglicherweise nicht initialisiert wurden.

Begründung

Eine Interface-Referenz sollte vor ihrer Verwendung auf <> 0 geprüft werden, weil es sonst beim Zugriff zur Laufzeit zu einer "Access Violation" kommen kann.

Wichtigkeit

Hoch

Beispiele:

Schnittstelle I_Sample:

INTERFACE I_Sample
METHOD SampleMethod : BOOL
VAR_INPUT
    nInput  : INT;
END_VAR

Funktionsbaustein FB_Sample:

FUNCTION_BLOCK FB_Sample IMPLEMENTS I_Sample
METHOD SampleMethod : BOOL
VAR_INPUT
    nInput  : INT;
END_VAR

Programm MAIN:

PROGRAM MAIN
VAR
    fbSample      : FB_Sample;
    iSample       : I_Sample;
    iSampleNotSet : I_Sample;
    nParam        : INT;
    bReturn       : BOOL;
END_VAR
iSample := fbSample; 
bReturn := iSample.SampleMethod(nInput := nParam);         // no error
 
bReturn := iSampleNotSet.SampleMethod(nInput := nParam);   // => SA0046

Überblick über die Regeln zum Thema „Dereferenzierung“

Pointer

Dereferenzierung von Pointern im Deklarationsteil

SA0124: Dereferenzierungszugriff in Initialisierungen

Mögliche Null-Pointer-Dereferenzierung im Implementierungsteil

SA0039: Mögliche Null-Pointer-Dereferenzierung

Referenzen

Verwendung von Referenzen im Deklarationsteil

SA0125: Referenzen in Initialisierungen

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