将 null 传递给 dlclose()

Passing null to dlclose()

将 null (0, NULL, nullptr, ..) 传递给 dlclose() 是否安全?

我在 manual.

中找不到与此相关的任何内容

安全。

查看 glibc 实现,传递给此函数的句柄是指向 struct link_map 实例的指针。然后在没有 NULL 检查的情况下取消引用该指针。

所以你需要在调用dlclose.

之前检查是否为NULL

如果没有记录,则很可能没有(或“最好”未定义)。 实际上,一个简单的测试就可以验证您的平台:

编译这个

#include <dlfcn.h>
int main()
{
   dlclose(0);
}

已经产生以下编译器警告 (gcc):

test.c: In function ‘main’:
test.c:5:2: warning: null argument where non-null required (argument 1) [-Wnonnull]
    5 |  dlclose(0);
      |  ^~~~~~~
/usr/bin/ld: /tmp/ccYF9oqz.o: in function `main':

一个 运行 它,如预期的那样因分段错误而崩溃。

为什么你想做或首先需要知道这个是个问题。 在调用 dlclose 或提供之前进行空检查应该是微不足道的 一个包装器,如果不方便的话。