2012-09-03 23 views
9

estoy usando Sonar y tengo este tipo de violación de ella por una paz de mi código:¿Cuál es el significado de la desreferencia del puntero nulo posible en findbug?

Correctness - Possible null pointer dereference 

Alguien ha saber acerca de esta regla en findbugs? Busqué mucho pero no puedo encontrar un buen código de muestra (en Java) que describa esta regla, lamentablemente el sitio findbugs no tiene ningún código de muestra o una buena descripción sobre esta regla.

¿Por qué aparece esta infracción?

+1

¡Publique un código donde se muestre la recomendación! – SiB

+1

Quiero ver el código de ejemplo sobre esta regla de findbugs. En general, quiero saberlo. –

Respuesta

15

Dice here

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH) 

Hay una rama de la afirmación de que, si se ejecuta, garantiza que un valor nulo se eliminan las referencias, lo que generaría una NullPointerException cuando se ejecuta el código. Por supuesto, el problema podría ser que la rama o la declaración no es factible y que la excepción de puntero nulo no se puede ejecutar nunca; decidir que está más allá de la capacidad de FindBugs.

Si hubiera publicado algún código, sería más fácil responder.

EDIT No veo mucha documentación pero aquí hay uno example! ¡Espero que esto ayude!

+0

Mi código es muy complicado y también cambié mi código y se corrigió, pero no entendí esta regla de findbugs. –

+0

Bueno, como dice 'Hay una rama de extracto que, si se ejecuta, garantiza que se eliminará la referencia de un valor nulo, lo que generaría una NullPointerException cuando se ejecute el código. 'Significa que potencialmente está asignando un' nulo' a un variable y usarlo de nuevo, lo que podría causar una excepción. – SiB

+0

Por favor dame un código de muestra. ¡Leí esta descripción antes! –

9

un código de ejemplo es algo como esto.

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

bien

Ésta es dos ejemplos simples: primero, se hace una referencia a un puntero: Posible nula

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 

simples?

0

En un lenguaje simple, si un valor de variable se asigna como nulo, e intenta acceder a él con cualquier método incorporado como add/get. Entonces, el problema de eliminación de referencias del puntero nulo viene con SONAR. Debido a que hay cambios para ello, ve nulo y lanza una excepción de puntero nulo. Intenta evitarlo si es posible.

Archivo de Ex archivo = null; file.getName(); arrojará "Desreferencia de puntero nulo"

Puede que no ocurra directamente como se menciona en el ejemplo, puede ser involuntario.

0

Tengo este problema con el siguiente fragmento de código: -

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

Aquí, el br BufferedReader puede haber null en br.close(). Sin embargo, solo puede ser null si new BufferedReader() falla, en cuyo caso estamos lanzando las excepciones pertinentes.

Esto es una advertencia falsa.Findbugs mencionan lo mismo: -

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. 
Cuestiones relacionadas