Klocwork Inside 的资源泄漏

Posted

技术标签:

【中文标题】Klocwork Inside 的资源泄漏【英文标题】:Resource leak for Klocwork Inside 【发布时间】:2020-07-03 12:08:39 【问题描述】:

使用此代码:

bool initQdbgLog()
        
          deleteOldLogs(); //delete old log files
          initLogFileName(); //create the logfile name
          QFile outFile (logFileName);
          if (outFile.open (QIODevice::WriteOnly | QIODevice::Append))   <<<<<<<<<<<<<(1)
              qInstallMsgHandler (QDBGLOG::myMessageHandler);
              return true;  <<<<<<<<<<<<<(2)
           else 
              return false;
          
        

Klocwork 发出资源泄漏信号:

Resource acquired to '@temp_3' at line <<<(1) may be lost here <<<(2) 

有人知道为什么吗?


@Sivanesh Waran 您好,感谢您的帮助,但我尝试了不同的代码并且总是得到相同的错误,即使使用该代码:

void initQdbgLog()

    deleteOldLogs(); //delete old log files
    initLogFileName(); //create the logfile name
    QFile outFile (logFileName);
    bool result = outFile.open (QIODevice::WriteOnly | QIODevice::Append);
    if (result) 
        qInstallMsgHandler (QDBGLOG::myMessageHandler);
        outFile.close();
    

【问题讨论】:

我会说这是静态分析器中的一个错误。 【参考方案1】:

在某些情况下,资源是有限的,如果一个资源没有被适当地释放,它在下次访问尝试时将不可用。

在第 6 行的 (QIODevice::WriteOnly | QIODevice::Append) 处获取的资源将在第 12 和 14 行丢失。但它们没有正确释放,因此 Klocwork 会在此处显示资源泄漏警告。

Klocwork 的 RH.LEAK 检查器会查找与先前获取但未释放的资源相关的所有描述符都丢失的实例。

【讨论】:

以上是关于Klocwork Inside 的资源泄漏的主要内容,如果未能解决你的问题,请参考以下文章

资源泄漏:'in' 永远不会关闭

cppcheck 检测到资源泄漏 - 误报?

使用 try 时资源泄漏...最后?

GDI 资源泄漏

为啥异常会导致 Node.js 中的资源泄漏?

c++ 内存泄漏问题