【问题标题】:Resource leak for Klocwork InsideKlocwork 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();
    }
}

【问题讨论】:

  • 我会说这是静态分析器中的一个错误。

标签: c++ qt qfile resource-leak klocwork


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多