Право свободной памяти при использовании libudev

Я использую 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 жалуется на утечки памяти.

Какой правильный способ освободить память в этом случае?

1

Решение

Согласно документация должно быть достаточно использовать:

udev_unref(udev);

а также Вот говорит:

udev_monitor_unref(usb);

должен освободить этот ресурс. Если это дает вам двойную свободу, то что-то не так, и вам действительно нужно отладить эту проблему, а не пытаться обойти ее другими способами.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]