vir*_*007 2 c++ pointers segmentation-fault c++11 c++14
我编写了一个在单链表上实现合并排序的函数,其中每个元素都有一个整数和一个下一个指针.其中一个功能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;
}
Run Code Online (Sandbox Code Playgroud)
这里source是指向给定链表的指针,frontRef和backRef是指针的引用,需要通过这个函数赋值.fronRef应该引用第一个链表,而backreef应该引用第二个链表.此代码在行时给出分段错误
*frontRef = source;*backRef = f;
被替换为
frontRef =&source; backRef =&f;
我无法理解其原因,因为这两组语句彼此相同
因为这两组陈述彼此相同
他们绝对不是.
*frontRef = source表示取消引用 frontRef并调用operator=返回的类型的左值表达式node.
frontRef = &source意思是取地址 source并分配给它frontRef.
如果frontRef未初始化或为null,则(1)是未定义的行为,但(2)没问题.
小智 9
*frontRef = source; *backreef = f;
Run Code Online (Sandbox Code Playgroud)
和
frontRef = &source; backreef = &f;
Run Code Online (Sandbox Code Playgroud)
不等同于:
一个正确分配front和back两个链接列表,一个没有,这导致分段错误.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |