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;
}
第一个区块无法正常工作且第二个区块正常工作的原因是什么?
答案 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;