如果我将head传递给null并将k作为任何正整数,那么函数是否会崩溃?

时间:2014-05-29 12:36:51

标签: c linked-list

以下是一次反转链接列表k元素的元素的函数, 我的问题是,如果我将null作为头传递,函数是否会崩溃,因为,在这种情况下,next永远不会初始化为任何值,因为它可能指向垃圾值,if(next!= null)可能是满意,所以语句head-> next可以执行,当head实际为null时,导致程序崩溃?

struct node *reverse (struct node *head, int k)
{
    struct node* current = head;
    struct node* next;
    struct node* prev = NULL;
    int count = 0;   

    /*reverse first k nodes of the linked list */
    while (current != NULL && count < k)
    {
       next  = current->next;
       current->next = prev;
       prev = current;
       current = next;
       count++;
    }

    /* next is now a pointer to (k+1)th node 
       Recursively call for the list starting from current.
       And make rest of the list as next of first node */
    if(next !=  NULL)
    {  head->next = reverse(next, k); }

    /* prev is new head of the input list */
    return prev;
}

2 个答案:

答案 0 :(得分:1)

如果将头传递为NULL,则跳过while循环,语句if(next != NULL)会将未初始化的指针与NULL进行比较,这是未定义的行为。 所以是的,你的程序可能会崩溃。

未指定单位化指针所包含的内容,并且与实现有关。

答案 1 :(得分:0)

对你的问题的严格回答是:不,不太可能。

鉴于head == 0k > 0,您最终会在函数的第21行使用next != 0(最有可能),但有一些垃圾随机值(正如您所指出的那样)将用于您的递归通话。

你的代码可能在第一次崩溃时不会崩溃,但它很可能在某个时候崩溃,或者继续递归一段未知的时间。无论如何,你不会得到你期望的结果。