首页 > 解决方案 > 使用 udev 函数时内存泄漏

问题描述

我写了一个函数来检查连接的USB设备是否是我的产品,使用PID值和vid值。我使用 udev 函数做到了这一点。当我使用 Valgrind 运行代码时,它在 udev 函数中显示内存泄漏......我已附上代码及其显示的错误。请帮帮我。这是我的代码

函数调用:

video_node_dir = opendir("/sys/class/video4linux/");  
    if(video_node_dir == NULL)  
     {  
        printf("%s():opendir failed\n", __func__);  
     }  
else   
{  
    while((video_node = readdir(video_node_dir))!= NULL)  
    {  
       if(video_node->d_type == DT_LNK)  
        {  
            strcpy(video_node_name,video_node->d_name);  
         if(enumerateDevices(video_node_name))  
            {
              printf("%s",DeviceName);
            }
        }
     }
 }   

函数定义:
这个函数只有内存泄漏。

bool enumerateDevices(char* dev_name) 
{  
   bool mydevice=false ;  
   struct udev *udev;  
   struct udev_enumerate *enumerate;  
   struct udev_list_entry *devices, *dev_list_entry;  
   struct udev_device *dev,*pdev;  
   char parameter[32] = "video4linux";  
   /* Create the udev object */  
   udev = udev_new();  
   if (!udev) {  
     return false;  
   }

enumerate = udev_enumerate_new(udev);  
udev_enumerate_add_match_subsystem(enumerate, parameter);  
udev_enumerate_scan_devices(enumerate);  
devices = udev_enumerate_get_list_entry(enumerate);

udev_list_entry_foreach(dev_list_entry, devices) {
const char *path;
path = udev_list_entry_get_name(dev_list_entry);
dev = udev_device_new_from_syspath(udev, path);
pdev = udev_device_get_parent_with_subsystem_devtype(
                dev,
                "usb",
                "usb_device");

char *vidValue = "2560",*pidValue = "c1d4";
if(strstr(path,dev_name)!=NULL)
{
    if (strcmp(udev_device_get_sysattr_value(pdev,"idVendor"),vidValue) == 0)
    {
        if (strcmp(udev_device_get_sysattr_value(pdev,"idProduct"),pidValue) == 0){
              mydevice=true;
              const char* productName = udev_device_get_sysattr_value(pdev,"product");
              strcpy(DeviceName, productName);
        }
          else{
                  mydevice=false;
                  break;
          }
    }
    else
    {
      mydevice=false;
      break;
    }
 }
 else{
  continue;
 } 
udev_device_unref(dev);
 }
  udev_enumerate_unref(enumerate);
  udev_unref(udev);
  return mydevice;
 }

显示的错误是

==4845== HEAP SUMMARY:  
==4845==     in use at exit: 39,336 bytes in 114 blocks  
==4845==   total heap usage: 809 allocs, 695 frees, 707,030 bytes allocated
==4845== 
==4845== 8 bytes in 2 blocks are still reachable in loss record 1 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052D9E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40535AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 8 bytes in 2 blocks are still reachable in loss record 2 of 32  
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)  
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052DB4: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40535AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 12 bytes in 2 blocks are still reachable in loss record 3 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052D9E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40535AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 12 bytes in 2 blocks are still reachable in loss record 4 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052DB4: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40535AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 16 bytes in 2 blocks are still reachable in loss record 5 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056103: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405669E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4047E61: udev_device_new_from_syspath (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x400FFC: enumerateDevices (deviceenum.c:33)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 16 bytes in 2 blocks are still reachable in loss record 6 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056103: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405669E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052C74: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CBE8: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 16 bytes in 2 blocks are still reachable in loss record 7 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056103: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405669E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052C74: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC5C: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 16 bytes in 2 blocks are still reachable in loss record 8 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052FCB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4053721: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 16 bytes in 4 blocks are still reachable in loss record 9 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405272A: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052994: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC1D: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 16 bytes in 4 blocks are indirectly lost in loss record 10 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x405270C: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052994: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC1D: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 32 bytes in 4 blocks are still reachable in loss record 11 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405319A: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40536CA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 40 bytes in 4 blocks are still reachable in loss record 12 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405272A: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052994: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC1D: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 42 bytes in 2 blocks are still reachable in loss record 13 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-    amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052FCB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4053721: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype     (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
        ==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 42 bytes in 2 blocks are indirectly lost in loss record 14 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4F52A17: __vasprintf_chk (vasprintf_chk.c:80)
==4845==    by 0x4F528F1: __asprintf_chk (asprintf_chk.c:32)
==4845==    by 0x4052FB0: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4053721: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 50 bytes in 4 blocks are still reachable in loss record 15 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405319A: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40536CA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 50 bytes in 4 blocks are indirectly lost in loss record 16 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x405317C: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40536CA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
    ==4845== 
==4845== 84 bytes in 2 blocks are still reachable in loss record 17 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056103: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405669E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
    ==4845==    by 0x4052C74: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC5C: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
    ==4845== 
==4845== 100 bytes in 2 blocks are still reachable in loss record 18 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056103: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405669E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
    ==4845==    by 0x4052C74: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CBE8: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 138 bytes in 2 blocks are still reachable in loss record 19 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056103: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x405669E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4047E61: udev_device_new_from_syspath (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x400FFC: enumerateDevices (deviceenum.c:33)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 146 bytes in 20 blocks are still reachable in loss record 20 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AACB: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4053779: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
    ==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 236 bytes in 20 blocks are still reachable in loss record 21 of 32
==4845==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4EC5489: strdup (strdup.c:42)
==4845==    by 0x404AADF: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4053779: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 768 bytes in 2 blocks are indirectly lost in loss record 22 of 32
==4845==    at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x40516F7: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056689: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4047E61: udev_device_new_from_syspath (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x400FFC: enumerateDevices (deviceenum.c:33)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 768 bytes in 2 blocks are indirectly lost in loss record 23 of 32
==4845==    at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x40516F7: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056689: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052C74: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CBE8: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
    ==4845== 
==4845== 768 bytes in 2 blocks are indirectly lost in loss record 24 of 32
==4845==    at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x40516F7: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4056689: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4052C74: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC5C: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 1,088 bytes in 4 blocks are indirectly lost in loss record 25 of 32
==4845==    at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x4047547: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4047A7B: udev_device_get_parent (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC8D: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845== 
==4845== 1,536 bytes in 4 blocks are still reachable in loss record 26 of 32
==4845==    at 0x4C2FD5F: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4845==    by 0x404FEF5: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4054656: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404AB0E: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x4053779: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x40537AA: ??? (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x404CC3F: udev_device_get_parent_with_subsystem_devtype (in /lib/x86_64-linux-gnu/libudev.so.1.6.4)
==4845==    by 0x401016: enumerateDevices (deviceenum.c:35)
==4845==    by 0x401200: list_and_select_device (deviceenum.c:95)
==4845==    by 0x40141D: storagecam_init (deviceenum.c:147)
==4845==    by 0x4015F2: main (deviceenum.c:175)
==4845==
==4845== LEAK SUMMARY:
==4845==    definitely lost: 544 bytes in 2 blocks
==4845==    indirectly lost: 28,076 bytes in 26 blocks
==4845==      possibly lost: 0 bytes in 0 blocks
==4845==    still reachable: 10,716 bytes in 86 blocks
==4845==         suppressed: 0 bytes in 0 blocks
==4845== 
==4845== For counts of detected and suppressed errors, rerun with: -v  
==4845== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

标签: cmemory-leaksvalgrindudev

解决方案


推荐阅读