为什么这段代码会返回段错误?
#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
应该指向0x2
,0x2
指向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/