什么是取消引用可能的空指针?

Posted

技术标签:

【中文标题】什么是取消引用可能的空指针?【英文标题】:What is dereferencing possible null pointer? 【发布时间】:2014-03-03 00:09:04 【问题描述】:

我正在为NetBeans 中的SFTP 制作程序。

我的代码的某些部分:

com.jcraft.jsch.Session sessionTarget = null;
com.jcraft.jsch.ChannelSftp channelTarget = null;
try 
       sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);
       sessionTarget.setPassword(backupPassword);
       sessionTarget.setConfig("StrictHostKeyChecking", "no");
       sessionTarget.connect();
       channelTarget = (ChannelSftp) sessionTarget.openChannel("sftp");
       channelTarget.connect();

       System.out.println("Target Channel Connected");
        catch (JSchException e) 
            System.out.println("Error Occured ======== Connection not estabilished");
            log.error("Error Occured ======== Connection not estabilished", e);
        finally 
            channelTarget.exit();     // Warning : dereferencing possible null pointer
            channelTarget.disconnect();  // Warning : dereferencing possible null pointer
            sessionTarget.disconnect();  // Warning : dereferencing possible null pointer
        

我收到警告dereferencing possible null pointer,我该如何解决这些警告??? 在哪里可以断开我的SessionChannel???

【问题讨论】:

【参考方案1】:

sessionTarget = jsch.getSession(backupUser, backupHost, backupPort); 在这一行中,getSession() 方法可以抛出异常,因此变量 sessionTargetchannelTarget 将为 null,在 finally 块中,您正在访问这些变量,这可能会导致空指针异常。

为避免这种情况,在 finally 块中,在访问变量之前检查是否为 null。

finally 
  if (channelTarget != null) 
       channelTarget.exit();     
       channelTarget.disconnect();  
  
  if (sessionTarget != null ) 
       sessionTarget.disconnect();  
  

【讨论】:

@AnkitLamba :更新答案【参考方案2】:

我认为 netbeans 只是想警告您这些可能为空,这可能不是真的。您可以选择禁用警告。只需将光标放在警告按钮ALT+ENTER 上,然后从选项中进行选择,甚至禁用警告。

【讨论】:

作为一般规则,您不想忽略/禁用警告,除非您知道一切都会好起来的。禁用此类警告属于该类别;如果您可能要取消对 null 的引用,那么在编译时弄清楚比必须调试 NullPointerException 更好。【参考方案3】:

这意味着:如果您的 channelTargetsessionTarget 在 finally 块中为空怎么办?检查它们是否为 null 以避免警告。

【讨论】:

以上是关于什么是取消引用可能的空指针?的主要内容,如果未能解决你的问题,请参考以下文章

不评估应用了 sizeof 的表达式是不是使得在 C++ 中取消引用 sizeof 内的空指针或无效指针是合法的?

cppcheck 取消引用空指针

C: Cppcheck : 可能的空点取消引用

条件是多余的,或者可能存在空指针取消引用

常见的空指针异常有哪些?

什么是 C++ 中的空指针? [复制]