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

标签 c pointers null operators dereference

我写了一个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/

相关文章:

继续 while 循环直到 char == EOF

c - 在portaudio中打开原始数据流(例如tcpdump)

c++ - 如果传递给函数,则确定数组的大小

swift - 字典字符串等价问题

java - 如何检查参数是否为空

c - 为什么使用 C 套接字程序发送和接收时文件大小不同?

c++ - 有人可以解释一下这个冒号#语法吗

检查指针是否为 NULL 会导致段错误

c - C中数组、指针和字符串的区别

c - 为什么两个指针显示相同的内存地址