2012-09-03 9 views
9

Sto usando Sonar e ho ottenuto questo tipo di violazione da esso per una pace del mio codice:Qual è il significato di Possibile dereferenziamento del puntatore nullo in findbug?

Correctness - Possible null pointer dereference 

Qualcuno ha informato questa regola in findbugs? Ho cercato molto ma non riesco a trovare un buon codice di esempio (in Java) che descriva questa regola, sfortunatamente il sito findbugs non ha avuto alcun codice di esempio o una buona descrizione di questa regola.

Perché viene visualizzata questa violazione?

+1

Invia un po 'di codice in cui viene visualizzato il suggerimento! – SiB

+1

Voglio vedere il codice di esempio su questa regola di findbugs. Voglio generalmente saperlo. –

risposta

15

Dice here

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH) 

V'è una branca della dichiarazione che, se eseguito, garantisce che un valore null verrà dereferenziato, che genererebbe un NullPointerException quando viene eseguito il codice. Ovviamente, il problema potrebbe essere che il ramo o l'istruzione non è fattibile e che l'eccezione puntatore nullo non può mai essere eseguita; decidere che è al di là della capacità di FindBugs.

Se avessi postato qualche codice, sarebbe più facile rispondere.

EDIT Non vedo molta documentazione, ma qui c'è uno example! Spero che questo ti aiuti!

+0

Il mio codice è molto complicato e ho anche cambiato il mio codice e ha risolto, ma non ho capito questa regola di findbugs. –

+0

Bene come dice "C'è un ramo di affermazione che, se eseguito, garantisce che un valore nullo sarà dereferenziato, il che genererebbe una NullPointerException quando il codice viene eseguito". Significa che si sta assegnando un valore "Null" ad un variabile e utilizzandolo di nuovo che potrebbe causare un'eccezione. – SiB

+0

Per favore dammi un codice di esempio. Ho letto questa descrizione prima! –

9

un codice di esempio è qualcosa di simile.

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

Va bene

Si tratta di due semplici esempi: primo luogo si dà una: Possibile puntatore nullo dereferenziare

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 

semplici?

0

In un linguaggio semplice, se un valore di variabile viene assegnato come nullo e si tenta di accedervi con qualsiasi metodo incorporato come add/get. Quindi il problema di dereferenziazione del puntatore nullo viene fornito con SONAR. Perché ci sono cambiamenti per andare nullo e lanciare un'eccezione di puntatore nullo. Cerca di evitarlo se possibile.

File ex file = null; file.getName(); genererà "Possibile dereferenza del puntatore nullo"

Potrebbe non succedere direttamente come menzionato nell'esempio, può essere involontariamente.

0

ho avuto questo problema con il seguente pezzo di codice: -

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(); 
    } 

Qui, il BufferedReader br può essere null in br.close(). Tuttavia può essere solo null se new BufferedReader() fallisce, nel qual caso stiamo lanciando le relative eccezioni.

Questo è quindi un falso avviso.Findbugs i documenti menzionano lo stesso: -

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.