为什么我不能初始化并在C中声明指向NULL的指针?

时间:2016-08-29 06:11:48

标签: c pointers null operators dereference

我写了一个C程序。函数内部的部分代码如下所示:

struct node* functionName(struct node *currentFirstPointer){
    struct node **head = NULL;
    *head = currentFirstPointer;
    return *head;
}

这里node是一个结构。但是当我运行程序时,这一行给了我segmentation fault。但是如果我在同一个函数中的单独语句中声明并初始化指针指针,那么它工作正常。

struct node* functionName(struct node *currentFirstPointer){
    struct node **head;
    *head = NULL;
    *head = currentFirstPointer;
    return *head;
}

第一个区块无法正常工作且第二个区块正常工作的原因是什么?

1 个答案:

答案 0 :(得分:1)

您有两个取消引用指针的示例。

struct node **head = NULL;
*head = currentFirstPointer;

struct node **head;
*head = NULL;
*head = currentFirstPointer;

两者都是未定义行为的原因。在第一个中,您将取消引用NULL指针。在第二个中,您将取消引用未初始化的指针。

第二个块似乎可以正常工作,但这是未定义行为的问题。

在取消引用指针之前,需要先为head分配内存。

struct node **head = malloc(sizeof(*head)*SOME_COUNT);
*head = currentFirstPointer;