【问题标题】:Right free of memory while using libudev使用 libudev 时没有内存
【发布时间】:2016-02-19 08:00:02
【问题描述】:

我使用libudev 来检测USB 设备。 初始化监视器和过滤器:

struct udev* udev = udev_new();
if (udev == nullptr) { /* error handling */ }

struct udev_monitor* usb = udev_monitor_new_from_netlink(udev, "udev");
udev_monitor_filter_add_match_subsystem_devtype(usb, "usb", NULL);
udev_monitor_enable_receiving(usb);

while(! canceled) { /* setup fd, poll fd, process result */ }

然后我释放分配的资源:

udev_monitor_unref(usb);
udev_unref(udev);

但有时我会得到

* 检测到 glibc * ./usbtest: 损坏的双链表:0x084cc5d0 ***

我尝试使用:

free(usb);
free(udev);

但随后 valgrind 抱怨内存泄漏。

在这种情况下释放内存的正确方法是什么?

【问题讨论】:

    标签: c++ linux udev


    【解决方案1】:

    根据documentation应该足够使用:

    udev_unref(udev);
    

    here 说:

    udev_monitor_unref(usb);
    

    应该释放该资源。如果这给了您双重免费,那么有些事情是不对的,您确实需要调试该问题,而不是尝试通过其他方式解决它。

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多