【发布时间】:2026-01-24 17:25:01
【问题描述】:
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
}
【问题讨论】:
-
如果您将
if (result)替换为if (fp != NULL),是否还会报告资源泄漏? -
这样写会怎样:
FILE *fp; if ((fp = fopen(filename, "r")) == NULL) {return false;} fclose(fp); return true; -
与问题无关,但
fopen(filename, "r")也可以 - 在某些系统上 - 如果filename可以写入或存在但受到保护以避免打开,则返回NULL。这无法在标准 C 中处理——这是使用系统特定 API 所必需的。