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

cppcheck detects a resource leak - a false negative?

cppcheck 检测到以下代码中的资源泄漏。 我认为这是一个假阴性。 如果不是,你能解释一下为什么是资源泄漏吗?

bool fileExists(const char* filename)
{
    FILE* fp = fopen(filename, "r");
    bool result = (fp != NULL);
    if (result) fclose(fp);
    return result; // <-- (cppcheck error) Resource leak: fp
}

是的,它是假阴性,当fp没有关闭

时,cppcheck错误地检测到一个理论上可能的分支

我个人将此代码重写为:

FILE* fp = fopen(filename, "r");
if (fp != NULL) {
    fclose(fp);
    return true;
}
return false;