使用此代码:
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();
}
}
最佳答案
在某些情况下,资源是有限的,并且如果没有正确释放资源,则在下一次访问尝试时它将不可用。
在第6行到(QIODevice::WriteOnly | QIODevice::Append)处获取的资源将在第12和14行丢失。但是它们没有正确释放,因此Klocwork将在此处显示资源泄漏警告。
Klocwork的RH.LEAK检查器查找实例,其中所有与先前获取的但未释放的资源相关的描述符都丢失了。
关于c++ - 内部Klocwork的资源泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62715138/