我写了一个C程序。函数内部的代码的某些部分如下所示:
struct node* functionName(struct node *currentFirstPointer){
struct node **head = NULL;
*head = currentFirstPointer;
return *head;
}
这里node
是一个结构体。但是当我运行程序时,这一行给了我一个段错误
。但是,如果我在同一函数内的单独语句中声明并初始化指向指针的指针,如下所示,那么它可以正常工作。
struct node* functionName(struct node *currentFirstPointer){
struct node **head;
*head = NULL;
*head = currentFirstPointer;
return *head;
}
第一个 block 不起作用而第二个 block 工作正常的原因可能是什么?
最佳答案
您有两个取消引用指针的示例。
struct node **head = NULL;
*head = currentFirstPointer;
和
struct node **head;
*head = NULL;
*head = currentFirstPointer;
两者都是导致未定义行为的原因。首先,您取消引用 NULL 指针。在第二个中,您取消引用未初始化的指针。
第二个 block 可能看起来有效,但这就是未定义行为的问题。
您需要先为head
分配内存,然后才能取消引用指针。
struct node **head = malloc(sizeof(*head)*SOME_COUNT);
*head = currentFirstPointer;
关于c - 为什么我不能在 C 中初始化并声明指向 NULL 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39199563/