Wciąż dostaję błędy brzękiem na następnej typu kodu i nie mogę zrozumieć, dlaczego są one błędne lub jak rozwiązać ich zadowoleniu dzyń:Błąd połączenia z "Potencjalnym dereferencją zerową".
+ (NSString *)checkForLength: (NSString *)theString error: (NSError **)error {
BOOL hasLength = ([theString length] > 0);
if (hasLength) return theString;
else {
*error = [NSError errorWithDomain:@"ErrorDomain" code:hasLength userInfo:nil];
return nil;
}
}
Pomijając całkowicie-contrived charakter celu przykład (który Clang nie sprzeciwił się, więc jest to wystarczająco ilustrujące), Clang zaciąga się w linii przypisania błędu z następującym zastrzeżeniem:
Potencjalny dereferencja zerowa. Zgodnie ze standardami kodowania w 'Tworzenie i zwracanie
NSError
obiektów' parametr "błąd" może być pusty.
Lubię mieć nieskazitelny raport Clang. Czytałem cytowany dokument i nie widzę sposobu na zrobienie tego, czego się spodziewano; Sprawdziłem biblioteki kakao o otwartym kodzie źródłowym i wydaje się, że jest to powszechny idiom. Jakieś pomysły?
Ugh, nie mogę uwierzyć, że to przegapiłem. Dzięki! – bbrown
Użyłem miliona razy 'if (error) * error = ...' zamiast, bez żadnych awarii lub błędów/ostrzeżeń analizatora. Czy mogę iść dalej tą drogą? –
Tak, jawna równoważność zerowego wskaźnika do 0 i fałsz jest czymś, co obiektywne C zachowane od zwykłego starego C. Ja osobiście uważam, że jest to zły styl, ale tak, możesz po prostu użyć 'if (error)' jeśli naprawdę chcesz. –