[问题] 新手reverse linked list debug

楼主: Moderator (ㄒㄒㄒㄒㄒㄒㄒㄒㄒㄒㄒx)   2020-01-13 23:50:54
https://onlinegdb.com/ryscef5gU
程式新手入门debug,弄了两个小时还弄不对QQ
如上程式码连结
功能在于反转串行
这边仅贴上有问题的function code
void reverse_list(node *s)
{
node *x=new node();
node *p=new node();
node *q=new node();
p=x=s; //p, x都初始化为list头s
q=NULL; //q初始化为list的bottom=Null
while(p->link!=NULL)
{
x->link=q; //x指回前一个node q
q=p; //q变成p
p=p->link; //p再往后搜索一格
x=p; //x也是p
}
s=x; //把s这个头设为x即收工
}
但是最后因为这个function code拿到segmentation fault结果
谢谢赐教!!
作者: j5128709 (j5128709)   2020-01-14 00:06:00
猜测 x->link=q; 往回指了,p就拿不到下一个了
作者: Schottky (顺风相送)   2020-01-14 00:56:00
你误会 p=s 的 = 是 copy,其实只是 assign pointer所以把 x 的 link 指向 q 时,p 的 link 也一样指向 q了
作者: harryooooooo (真_终极萝莉控Ecstasy_)   2020-01-14 11:00:00
x p q初始化之后又马上被assign不就都leak了吗...
作者: Schottky (顺风相送)   2020-01-14 13:34:00
楼上说得完全没错,不过那不是出槌的直接原因所以我和一楼才没有讲,但现在想想既然看见就应该要讲..回传用 return 的呀,不要 assign 参数 s参数是传 s 的值进来而已,不是直接让你存取 main 的 s
楼主: Moderator (ㄒㄒㄒㄒㄒㄒㄒㄒㄒㄒㄒx)   2020-01-14 19:40:00
解决了 我的return type还通通写错 感谢热心指导!! ^^
作者: ko27tye (好滋好滋)   2020-01-14 19:46:00
看一下call by value的解释吧 s是copy传进function的
楼主: Moderator (ㄒㄒㄒㄒㄒㄒㄒㄒㄒㄒㄒx)   2020-01-14 23:21:00
OK Thanks!!
作者: alpq (666)   2020-01-22 11:56:00
void 不会有回传值 要用void 就设global variable吧

Links booklink

Contact Us: admin [ a t ] ucptt.com