【发布时间】:2019-07-16 17:19:36
【问题描述】:
我写了一个在单链表上实现归并排序的函数,其中每个元素都有一个整数和一个 next 指针。 其中一个函数 splitlist 用于将给定的链表拆分为两个链表
void splitList(struct node* source, struct node** frontRef, struct node** backRef)
{
struct node *s, *f;
s = source;
f = s->next;
while(f && f->next)
{
s = s->next;
f = f->next->next;
}
*frontRef = source;
f = s->next;
s->next = NULL;
*backRef = f;
}
这里的source是一个指向给定链表的指针,frontRef和backRef是对需要通过这个函数分配的指针的引用。 fronRef 应该引用第一个链表,而 backreef 应该引用第二个链表。 此代码在行时会出现分段错误
*frontRef = 来源; *backRef = f;
被替换为
frontRef = &source; backRef = &f;
我不明白这是什么原因,因为这两组陈述彼此等价
【问题讨论】:
-
@user200783 这有什么关系?
-
source和f是局部变量,保持对它们的引用不会很好地工作 -
'两个语句是等价的'。显然他们不是。使用指针时,您必须牢记复制指针和复制所指向的内容之间的区别。
-
@user200783 这是我在发布之前删除的一些调试语句的一部分。我现在删除了它。
标签: c++ c++11 pointers segmentation-fault c++14