如果句柄为NULL,pcap_close()将崩溃

如果句柄为NULL,pcap_close()将崩溃,c,pcap,libpcap,C,Pcap,Libpcap,是否预计pcap_会出现故障?我在libpcap-1.7.4-2ubuntu0.1上观察到这种行为。手册页没有说明空pcap_t*函数的作用。我在谷歌上搜索,也找不到任何东西。没有文档?只需检查: 第一条指令读取p->opt.device,如果p为NULL,则该指令具有未定义的行为 防止空值是一个简单的增强。另一方面,崩溃是确定性的,当传递空指针时可以很容易地进行调试。没有文档吗?只需检查: 第一条指令读取p->opt.device,如果p为NULL,则该指令具有未定义的行为 防止空值是一个简单

是否预计pcap_会出现故障?我在libpcap-1.7.4-2ubuntu0.1上观察到这种行为。手册页没有说明空pcap_t*函数的作用。我在谷歌上搜索,也找不到任何东西。

没有文档?只需检查:

第一条指令读取p->opt.device,如果p为NULL,则该指令具有未定义的行为


防止空值是一个简单的增强。另一方面,崩溃是确定性的,当传递空指针时可以很容易地进行调试。

没有文档吗?只需检查:

第一条指令读取p->opt.device,如果p为NULL,则该指令具有未定义的行为

防止空值是一个简单的增强。另一方面,崩溃是确定性的,当传递空指针时,可以很容易地进行调试。

来自:

这种行为非常常见,几乎在每个用于关闭/释放/清理以前请求的资源的C库函数中都会发现。在C语言中,空检查几乎总是留给调用方,如果不是,您很可能会在文档中发现它是明确写的。

来自:


这种行为非常常见,几乎在每个用于关闭/释放/清理以前请求的资源的C库函数中都会发现。在C语言中,空检查几乎总是留给调用方,如果不是,您很可能会发现它明确地写在文档中。

其他答案是正确的。通常情况下,并非特定于pcap_close,除非有文件记录接受空指针并对其进行特殊处理,否则默认假设始终是传递空指针违反了接口接触,由于空指针不是指向函数预期接收的指针的有效指针。

其他答案是正确的。通常情况下,并非特定于pcap_close,除非有文件记录接受空指针并对其进行特殊处理,否则默认假设始终是传递空指针违反了接口接触,因为空指针不是指向函数记录中预期接收指针的任何对象的有效指针。

您找到了答案:针对空保护调用您找到了答案:针对空保护调用这很简单,不是一个简单的增强。相反,它会掩盖调用程序中当前捕获的错误。是的。另一方面,崩溃是确定性的,在我的答案结束时,当传递一个空指针时,可以很容易地进行调试。fclose在传递NULL时失败,但free保证工作……算了吧。这很简单,不是一个简单的增强。相反,它会掩盖调用程序中当前捕获的错误。是的。另一方面,崩溃是确定性的,在我的答案结束时,当传递一个空指针时,可以很容易地进行调试。fclose在传递NULL时失败,但free保证工作…如图所示。
void pcap_close(pcap_t *p)
{    
    if (p->opt.device != NULL)

        free(p->opt.device);

    p->cleanup_op(p);

    free(p);
}
#include <pcap/pcap.h>
void pcap_close(pcap_t *p);
void
pcap_close(pcap_t *p)
{
    if (p->opt.device != NULL)
        free(p->opt.device);
    p->cleanup_op(p);
    free(p);
}