gpt4 book ai didi

C指针指针,和seg fault

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:58 24 4
gpt4 key购买 nike

下面是我用 C 编写的简单链表。我的问题在“headRef = &newNode;”中这会导致段错误。然后我尝试改为“*headRef = newNode;”这解决了段错误问题。尽管这两行代码在我看来以相同的方式工作,但为什么其中一行会导致段错误而另一行不会呢?提前致谢。

struct node{
int data;
struct node* next;
};

void Push(struct node** headRef, int data){
struct node* newNode = malloc(sizeof(struct node));
if(!newNode) return;
newNode->data = data;
newNode->next = *headRef;
headRef = &newNode;
return;
}

最佳答案

您对指针的引用语义存在根本性的误解。这是核心示例:

// Call site:
T x;
modify(&x); // take address-of at the call site...

// Callee:
void modify(T * p) // ... so the caller takes a pointer...
{
*p = make_T(); // ... and dereferences it.
}

因此:调用者获取地址,被调用者取消引用指针并修改对象。

在您的代码中,这意味着您需要说 *headRef = newNode;(在我们的基本示例中,您有 T = struct node *)。你搞错了!

关于C指针指针,和seg fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com