如何取消分配dlopen()分配的内存?

如何取消分配dlopen()分配的内存?,dlopen,Dlopen,我即将解决这个问题。我读了一些关于dlopen的问题,但仍然不清楚。dlopen似乎是通过calloc或malloc分配内存。但是如何释放这个内存呢 “dl”的类似代码指向泄漏问题 这是一个bug还是我们需要忽略它?如果我需要修理,有人能指导我修理吗 谢谢, Boobesh仔细阅读手册页。还可以阅读德雷珀的论文,其中给出了许多有趣的解释 通过调用dlclose 请注意您拥有的dlopen-ed插件所使用或提供的资源。该插件可能具有所谓的构造函数或析构函数,例如使用构造函数声明的函数等 您也不会在

我即将解决这个问题。我读了一些关于dlopen的问题,但仍然不清楚。dlopen似乎是通过calloc或malloc分配内存。但是如何释放这个内存呢

“dl”的类似代码指向泄漏问题

这是一个bug还是我们需要忽略它?如果我需要修理,有人能指导我修理吗

谢谢, Boobesh

仔细阅读手册页。还可以阅读德雷珀的论文,其中给出了许多有趣的解释

通过调用
dlclose

请注意您拥有的
dlopen
-ed插件所使用或提供的资源。该插件可能具有所谓的构造函数或析构函数,例如使用
构造函数声明的函数等


您也不会在意,也不会费心打电话给
dlclose
,因此会接受一些泄漏。实际上,在Linux上,您可以毫不费力地调用数十万次
dlopen
(只有您的地址空间会增加),请参见我的示例。

准确显示您的代码调用
dlopen
dlsym
;请注意,
dlopen
-ing
libc.so.6
似乎特别奇怪。你为什么要这么做?
(snip)
Event alloc_fn: Called allocation function "dlopen"
Event var_assign: Assigned variable "dl" to storage returned from "dlopen(&"libc.so.6",1)"
261             dl = dlopen("libc.so.6", RTLD_LAZY);
At conditional (1): "dl" taking true path
262             if (dl) {
Event noescape: Variable "dl" not freed or pointed-to in function "dlsym"
263                 func = dlsym(dl, "fdopen");
264             }
265             assert(func != NULL);
266         }
Event leaked_storage: Variable "dl" goes out of scope
267         return (*func)(fd, mode);
(snip)