Dereferenzierung von Nullzeiger, aber ich verwende keine Zeiger

7

Ich habe das "Build and analyze" in xCode gemacht und "Dereference of null pointer" erhalten, wenn ich in meiner init-Methode einen normalen int auf 0 gesetzt habe. Ich habe in meinem Code unten notiert, für welche Zeile ich die Nachricht bekomme. Ich entwickle für das iPhone.

Bric.m

%Vor%

Bric.h

%Vor%

Es ist nicht der vollständige Code, eingefügt, was ich für nützlich halte.

Da ich keinen Zeiger verwende, finde ich das ziemlich seltsam. Wieso bekomme ich diese Nachricht?

Danke und Grüße, Niklas

    
Nicsoft 30.07.2010, 08:46
quelle

3 Antworten

20

Die erste if -Anweisung in Ihrer init-Methode prüft, ob [super init] nil zurückgibt oder nicht. (Technisch sollte es if ((self = [super init])) geschrieben sein, vor dem der neue LLVM-Compiler Sie warnt).

Der statische Analysator überprüft ALLE möglichen Codepfade, selbst wenn [super init] den Wert nil zurückgibt. In diesem Fall schlägt Ihre if -Anweisung fehl und self ist nil . Wenn self ist nil , dann sind die Instanzvariablen nicht zugänglich.

Um dies zu beheben, müssen Sie Ihre Initialisierungen innerhalb der if -Anweisung mit der Bildinitialisierung und dann return self außerhalb der if-Anweisung platzieren.

    
Jasarien 30.07.2010, 10:07
quelle
0

Haben Sie es als Eigentum erklärt? Ich bin mir nicht sicher, ob es in diesem Fall notwendig ist, aber Sie haben keine Accessor-Methoden erstellt (obwohl ich denke, dass Sie die Instanzvariable immer noch direkt setzen ...)

, d. h. in Ihrer Header-Datei,

%Vor%

und in Ihrer .m-Datei

%Vor%

Damit können Sie auf die Variable als self.stepX und self.stepY zugreifen. Manchmal macht der Analysator aber Fehler ... Ich habe festgestellt, dass er sich nicht sehr effektiv mit while loops befasst. Wie auch immer, sehen Sie, was passiert, wenn Sie diese Zeilen Code hinzufügen und zu mir zurückkommen.

    
Helen 30.07.2010 09:04
quelle
0

Ihre init Methode ist falsch.

Es sollte so aussehen:

%Vor%

Ich nehme an, dass die Nachricht, die Sie bekommen, vom statischen Analysator stammt. Da stepX eine Instanzvariable ist, die Zeile

%Vor%

ist eine Abkürzung für

%Vor%

wobei -> seine normale C-Bedeutung hat. Da diese Zeile außerhalb des Tests liegt, ist self in Ihrem Code nicht null, der statische Analysator weist auf ein Problem hin.

    
JeremyP 30.07.2010 10:15
quelle