Cppcheck :(错误)资源泄漏

时间:2013-06-13 01:27:23

标签: c memory-leaks

我正在使用C进行一些学习,并且无法识别内存泄漏情况

当我用cppcheck检查代码时:get(error)资源泄漏: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;
}

我觉得我错过了内存管理的一些东西。

1 个答案:

答案 0 :(得分:4)

您需要fclose函数中早先fopen编辑的文件,否则您会泄漏FILE*分配和指向的资源。

例如:

if (!fgets(s, sizeof(s), f)) {
     fclose(f);
     return MEDIA_BUS_UNKNOWN;
} 

希望这有帮助!