下面是我用 C 编写的简单链表。我的问题是在“headRef = &newNode;”中这会导致分段错误。然后我尝试“*headRef = newNode;”这解决了seg错误问题。尽管这两行代码在我看来似乎以相同的方式工作,但为什么一行代码会导致段错误,而另一行则不会?
提前致谢。
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 *
)。你搞错了!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)