在这个用于添加到链接列表的代码片段中,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
}
答案 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)
但是没有记录,所以在运行时添加提取检查(非常便宜)! )是值得的。