[問題] 新手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