2012-09-03 13 views
9

Używam Sonar i mam tego rodzaju naruszenie od niego o pokoju mojego kodu:Jakie jest znaczenie możliwego zerowania wskaźnika pustego w findbug?

Correctness - Possible null pointer dereference 

Czy ktoś wie o tej reguły w findbugs? Dużo przeszukałem, ale nie mogę znaleźć dobrego kodu przykładowego (w Javie), który opisałby tę zasadę, niestety strona findbugs nie miała żadnego przykładowego kodu ani dobrego opisu tej reguły.

Dlaczego pojawia się to naruszenie?

+1

Dodaj kod, na którym pojawia się rekomendacja! – SiB

+1

Chcę zobaczyć przykładowy kod o tej zasadzie findbugs. Chcę to ogólnie wiedzieć. –

Odpowiedz

15

Mówi here

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH) 

Jest filią stwierdzeniem, że jeśli wykonane, gwarantuje, że wartość null zostanie dereferencjonowane, które generują NullPointerException, gdy kod jest wykonywany. Oczywiście problem może być taki, że gałąź lub instrukcja jest niewykonalna i że wyjątek wskaźnika pustego nie może być nigdy wykonany; decydowanie, że jest poza zdolnością FindBugs.

Gdybyś opublikował jakiś kod, łatwiej byłoby odpowiedzieć.

EDYTOWANIE Nie widzę wielu dokumentacji, ale tutaj jest jeden example! Mam nadzieję że to pomoże!

+0

Mój kod jest bardzo skomplikowany, a także zmieniłem kod i został on naprawiony, ale nie rozumiałem tej zasady dotyczącej "findbugs". –

+0

Cóż, jak mówi: "Istnieje gałąź oświadczenia, która jeśli zostanie wykonana, gwarantuje, że wartość pusta zostanie dereferencjonowana, która wygenerowałaby wyjątek NullPointerEception podczas wykonywania kodu." Oznacza, że ​​potencjalnie przypisujesz 'null' do zmienna i ponowne użycie, co może spowodować wyjątek. – SiB

+0

Podaj mi przykładowy kod. Przeczytałem ten opis wcześniej! –

9

przykładowy kod jest podobny do tego.

String s = null ; 
if (today is monday){ 
    s = "Monday" ; 
else if (today is tuesday){ 
    s = "Tuesday" ; 
} 
System.out.println(s.length()); //Will throw a null pointer if today is not monday or tuesday. 
2

Ok

to dwa proste przykłady: Pierwszy z nich daje: możliwy zerowy wskaźnik Dereferencjuje

1. Error 
    ArrayList a = null; 
    a.add(j, PointSet.get(j)); 
    // now i'm trying to add to the ArrayList 
    // because i'm giving it null it gives me the "Possible null pointer dereference" 

2. No Error 
    ArrayList a = new ArrayList<>(); 
    a.add(j, PointSet.get(j)); 
    // adding elements to the ArrayList 
    // no problem 

Proste?

0

W prostym języku, jeśli zmienna wartość jest przypisana jako null, i próbujesz uzyskać do niej dostęp za pomocą dowolnej wbudowanej metody, takiej jak add/get. Następnie problem z dereferencją wskaźnika pustego pojawia się z SONAR. Ponieważ istnieją zmiany dla niego idź null i throw wyjątek wskaźnik null. Staraj się go unikać, jeśli to możliwe.

Ex Plik file = null; file.getName(); rzuci "Możliwe zerowanie wskaźnika zerowego"

Nie może się zdarzyć bezpośrednio, jak wspomniano w przykładzie, może być niechcący.

0

mam ten problem z następujący fragment kodu: -

BufferedReader br = null; 
    String queryTemplate = null; 
    try { 
     br = new BufferedReader(new FileReader(queryFile)); 
     queryTemplate = br.readLine(); 
    } catch (FileNotFoundException e) { 
     // throw exception 
    } catch (IOException e) { 
     // throw exception 
    } finally { 
     br.close(); 
    } 

Tutaj br BufferedReader może być null w br.close(). Jednak może to być tylko null, jeśli new BufferedReader() nie powiedzie się, w takim przypadku odrzucamy odpowiednie wyjątki.

Jest to zatem fałszywe ostrzeżenie.Findbugs docs wspomina to samo: -

This may lead to a NullPointerException when the code is executed. 
    Note that because FindBugs currently does not prune infeasible 
    exception paths, this may be a false warning.