2016-02-19 4 views
1

J'utilise libudev pour détecter des périphériques USB. moniteur Initialiser et filtre:Libère de la mémoire lors de l'utilisation de libudev

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 */ } 

Puis je libère les ressources allouées avec:

udev_monitor_unref(usb); 
udev_unref(udev); 

Mais parfois je reçois

* glibc détecté * ./usbtest: corrompus doubles liste liée: 0x084cc5d0 ***

J'ai essayé d'utiliser:

free(usb); 
free(udev); 

Mais plainte valgrind au sujet des fuites de mémoire.

Quelle est la bonne façon de libérer la mémoire dans ce cas?

Répondre

1

Selon le documentation il devrait être suffisant d'utiliser:

udev_unref(udev); 

et here dit:

udev_monitor_unref(usb); 

devrait libérer cette ressource. Si cela vous donne un double gratuit, alors quelque chose ne va pas, et vous avez vraiment besoin de déboguer ce problème, pas essayer de contourner le problème par d'autres moyens.