2012-09-03 21 views
9

私はソナーを使用していると私は私のコードの平和のために、それから、違反のこの種を持っている:findbugのPossible nullポインタの逆参照の意味は何ですか?

Correctness - Possible null pointer dereference 

は、誰もがFindBugsの中にこのルールを知っていますか?私はたくさん検索しましたが、このルールを説明する良いサンプルコード(Javaで)が見つかりませんでしたが、残念ながらfindbugsサイトにはこのルールに関するサンプルコードや説明がありませんでした。

この違反はなぜ発生しますか?

+1

推奨事項が表示されている場所にコードを投稿してください。 – SiB

+1

このfindbugsルールに関するサンプルコードを見たいと思います。私はそれを一般的に知りたい。 –

答えて

15

それは実行された場合、その文の分岐がありhere

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH) 

言い、NULL値は、コードが実行されたときにNullPointerExceptionが発生することになる、間接参照されることを保証します。もちろん、ブランチや文が実行不可能で、nullポインタ例外が実行されないことが問題です。それがFindBugsの能力を超えていると判断します。

もしあなたがいくつかのコードを掲示すれば、それは簡単に答えるでしょう。

EDIT多くのドキュメントは表示されませんが、ここにはexampleが1つあります。お役に立てれば!

+0

私のコードは非常に複雑で、私のコードも変更されていますが、このfindbugsルールは理解できませんでした。 –

+0

「実行された場合、コードが実行されるとNullPointerExceptionを生成するnull値が参照解除されることを保証するステートメントの分岐があります。それを再度使用すると、例外が発生する可能性があります。 – SiB

+0

サンプルコードを教えてください。私は前にこの説明を読んだ! –

9

サンプルコードは次のようなものです。オーケー

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

これは、2つの単純な例です: 最初のものは与える:可能なヌルポインタ参照

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 

シンプル?

0

単純な言語では、変数値がnullとして割り当てられ、add/getのようなinbuiltメソッドを使用してアクセスしようとします。次に、ヌルポインタ参照解除の問題にSONARが付属します。それには変更があるので、ヌルになり、ヌルポインタ例外をスローします。可能な場合は避けてください。

Ex File file = null; file.getName(); は "nullポインタの逆参照の可能性"を発生させます

例で説明したように直接発生することはありませんが、それは意図せずに発生する可能性があります。私は以下のコードでこの問題を得た

0

: -

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

br BufferedReaderのはbr.close()nullことができます。ただし、が失敗した場合は、nullにしかなりません。この場合、関連する例外がスローされます。

これは誤った警告です。Findbugsドキュメントには次のように記載されています。 -

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. 
関連する問題