2012-09-03 30 views
9

मैं सोनार का उपयोग कर रहा है और मैं अपने कोड का एक शांति के लिए इसे से उल्लंघन इस तरह मिल गया है:findbug में संभावित नल पॉइंटर डेरफर का अर्थ क्या है?

Correctness - Possible null pointer dereference 

किसी FindBugs में इस नियम के बारे में पता है? मैंने बहुत कुछ खोजा लेकिन मुझे एक अच्छा नमूना कोड नहीं मिला (जावा में) जो इस नियम का वर्णन करता है, दुर्भाग्य से findbugs साइट पर इस नियम के बारे में कोई नमूना कोड या अच्छा विवरण नहीं था।

यह उल्लंघन क्यों दिखाई देता है?

+1

कुछ कोड पोस्ट करें जहां सिफारिश दिखाई दे रही है! – SiB

+1

मैं इस खोजबग नियम के बारे में नमूना कोड देखना चाहता हूं। मैं आमतौर पर इसे जानना चाहता हूं। –

उत्तर

15

इसे कहते हैं here

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH) 

बयान की एक शाखा है कि, अगर मार डाला, गारंटी देता है कि एक शून्य मान dereferenced हो जाएगा, जो एक NullPointerException उत्पन्न होगा जब कोड निष्पादित। बेशक, समस्या यह हो सकती है कि शाखा या कथन अक्षम है और शून्य सूचक अपवाद को कभी भी निष्पादित नहीं किया जा सकता है; यह तय करना कि FindBugs की क्षमता से परे है।

यदि आप कुछ कोड पोस्ट करते हैं तो इसका उत्तर देना आसान होगा।

संपादित करें मुझे बहुत सारे दस्तावेज नहीं दिख रहे हैं लेकिन यहां एक example है! उम्मीद है की यह मदद करेगा!

+0

मेरा कोड बहुत जटिल है और मैंने अपना कोड बदल दिया और यह तय हो गया लेकिन मुझे यह खोजबग नियम नहीं समझा। –

+0

जैसा कि यह कहता है, 'कथन की एक शाखा है कि, यदि निष्पादित किया गया है, तो गारंटी देता है कि एक शून्य मान को संदर्भित किया जाएगा, जो कोड निष्पादित होने पर एक NullPointerException उत्पन्न करेगा।' इसका मतलब है कि आप संभावित रूप से 'शून्य' असाइन कर रहे हैं परिवर्तनीय और इसे फिर से उपयोग करना जो अपवाद का कारण बन सकता है। – 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

ठीक

इसमें दो सरल उदाहरण है: सबसे पहले एक एक देता है: संभावित NULL संकेतक भिन्नता

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

सरल भाषा में, यदि एक चर मूल्य को शून्य के रूप में असाइन किया गया है, और आप इसे जोड़ने/प्राप्त करने जैसी किसी भी अंतर्निहित विधि से एक्सेस करने का प्रयास करते हैं। फिर सोनर के साथ शून्य सूचक अव्यवस्था मुद्दा आता है। क्योंकि इसके लिए परिवर्तन शून्य हो जाते हैं, और शून्य सूचक अपवाद फेंक देते हैं। यदि संभव हो तो इसे टालने का प्रयास करें।

पूर्व फ़ाइल फ़ाइल = शून्य; file.getName(); "संभावित नल सूचक ड्रेफरेंस" फेंक देगा

उदाहरण के तौर पर यह उल्लेख नहीं किया जा सकता है, यह अनजाने में हो सकता है।

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 हो सकता है यदि new BufferedReader() विफल रहता है, इस मामले में हम प्रासंगिक अपवाद फेंक रहे हैं।

यह इस प्रकार एक झूठी चेतावनी है।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.