当我将null
指针传递给dlclose
时,我遇到了崩溃。
我应该在致电dlclose
之前检查空吗?
POSIX对此没有任何说明: http://pubs.opengroup.org/onlinepubs/7908799/xsh/dlclose.html
它是未定义的行为还是dlclose
实施中的错误?
答案 0 :(得分:3)
这很棘手。 POSIX声明
如果
handle
未引用打开的对象,dlclose()
将返回非零值
您可以从中推断出,对于任意指针,它应该检测该指针是否指向打开的对象。 Linux / Glibc版本显然没有这样的检查,因此您需要自己检查NULL
。
[除此之外,Linux手册页也不是很有帮助。它隐含于libdl
函数的行为,在没有明确声明一致性的情况下推迟到POSIX。]
答案 1 :(得分:1)
它也没有说明接受NULL
和而不是崩溃。我们可以从您的测试中假设它没有进行明确的NULL
检查,并且它确实需要以某种方式使用指针来执行结束操作......所以你有它。
答案 2 :(得分:0)
遵循malloc
/ free
约定(1),这是一个错误。如果它遵循fopen
/ fclose
约定(2)则不符合。因此,如果存在错误,则它符合标准,因为它缺乏处理僵尸的惯例。
我认为这应该针对即将到来的POSIX修订进行修订,以避免混淆。
我从这个回答https://stackoverflow.com/a/6277781/877329找到了,然后阅读man pthread_join
,你可以使用无效的tid调用pthread_join
,支持malloc/free
传播。我在动态加载器接口中发现的另一个问题是它不使用标准错误处理系统,但有自己的dlerror
函数。