c - 指向链表指针的指针

标签 c pointers linked-list

为什么这段代码会返回段错误?

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


typedef struct node {
    struct node * next;
    int val;
} Node;

void foo(Node **head) {
    Node * curNode = *head;
    curNode = malloc(sizeof(Node));
    curNode->val = 5;
    curNode->next = NULL;
}

int main() {
    Node * head = NULL;
    foo(&head);
    printf("Val %d", head->val);
}

按照我的逻辑,我给出了一个指向 LinkedList 头部的指针。假设LinkedList的头存储在0x1中,指向0x1的指针存储在0x2中。所以&head应该指向0x20x2指向0x1。我将 0x2 更改为指向而不是 0x555 (新值)。因此,&head 仍然指向 0x2,但 0x2 现在指向 0x555 而不是 0x1 。但我却遇到段错误,这是为什么?

最佳答案

问题是您将 head 取消引用为本地指针,然后仅修改该指针,而不是 head 指向的实际指针。

修复:

void foo(Node **head) {
    *head = (Node*)malloc(sizeof(Node));
    (*head)->val = 5;
    (*head)->next = NULL;
}

关于c - 指向链表指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35571692/

相关文章:

c - 为什么函数没有将输入映射到我的变量?

c - C程序中的gets方法

c# - c#中的双向循环链表

添加到链接列表时出现 java.lang.stackoverflowerror

c++ - 谷歌机器人信息?

C 数组值有时会被取反

c - 为什么我的结构定义不完整?

c - 结构体中取消引用指针的错误

pointers - 将指针转换为 byte slice

C++ 为简单链表编写复制构造函数