1

使用此代码:

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

1 回答 1

0

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

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

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

于 2020-07-06T10:28:56.503 回答