Linked List- NULL指针检查?

时间:2015-03-10 09:30:19

标签: c pointers allocation

在这个用于添加到链接列表的代码片段中,if(List == NULL)做什么?我试图向它投入一些意见,看看我是否可以毫无运气地参与该声明。什么类型的输入可以起作用?

main()
{
    struct Node *List;
    List = NULL;

    append (&List, 5);
}



void append(struct Node **List, int num)
{
    if (List == NULL)
    {
        return;
    }


    if (*List == NULL)
    {
        *List = malloc(sizeof(struct Node));
        (*List)->data = num;
        (*List)->next = NULL;

    }
   //some additional cases edited out for brevity
}

2 个答案:

答案 0 :(得分:0)

如果将NULL作为List指针传递,则在取消引用它时程序将崩溃:

if (*List == NULL)

因此,您必须检查是否未使用NULL作为参数调用该函数

答案 1 :(得分:0)

如果您(或图书馆的用户)因任何原因致电append(NULL,42);,那么,由于if(List == NULL)检查,您的计划不会崩溃。否则(如果您删除if(List == NULL)支票),则为undefined behavior,实际上segmentation fault会发生。该检查是defensive programming的实例。

原则上看起来append似乎被称为append(&somevar, someint)但是没有记录,所以在运行时添加提取检查(非常便宜)! )是值得的。