我正在用C进行学习,无法识别内存泄漏情况
当我使用cppcheck检查代码时:get(错误)资源泄漏:f
enum bus_type {
MEDIA_BUS_UNKNOWN,
MEDIA_BUS_VIRTUAL,
MEDIA_BUS_PCI,
MEDIA_BUS_USB,
};
static enum bus_type get_bus(char *device)
{
char file[PATH_MAX];
char s[1024];
FILE *f;
if (!strcmp(device, "/sys/devices/virtual"))
return MEDIA_BUS_VIRTUAL;
snprintf(file, PATH_MAX, "%s/modalias", device);
f = fopen(file, "r");
if (!f)
return MEDIA_BUS_UNKNOWN;
if (!fgets(s, sizeof(s), f)) /* <-- (error) Resource leak: f */
return MEDIA_BUS_UNKNOWN;
fclose(f);
if (!strncmp(s, "pci", 3))
return MEDIA_BUS_PCI;
if (!strncmp(s, "usb", 3))
return MEDIA_BUS_USB;
return MEDIA_BUS_UNKNOWN;
}
Run Code Online (Sandbox Code Playgroud)
我觉得我在内存管理方面缺少一些东西。
您需要使用之前在函数中编辑过fclose
的文件,fopen
否则将泄漏由分配和指向的资源FILE*
。
例如:
if (!fgets(s, sizeof(s), f)) {
fclose(f);
return MEDIA_BUS_UNKNOWN;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!