[問題] C++ 鏈結串列跑不出來,快崩潰

看板Programming作者 (......)時間11年前 (2012/08/19 22:07), 編輯推噓4(4010)
留言14則, 8人參與, 最新討論串1/1
#include<iostream> using namespace std; struct Node{ int data; Node *link; }; void addNewNode(Node *,int); void listAll(Node *); int main(void){ int i,x; Node *head=NULL; for(i=1;i<=3;i++){ cin>>x; addNewNode(head,x); } listAll(head); system("pause"); return 0; } void addNewNode(Node *ptr,int x){ Node *pNewNode=new Node; pNewNode->data=x; pNewNode->link=NULL; if(NULL==ptr){ ptr=pNewNode;} else{ Node *pTailNode=ptr; while(pTailNode->link!=NULL){ pTailNode=pTailNode->link; } pTailNode->link=pNewNode; } } void listAll(Node *ptr){ while(ptr->link!=NULL){ cout<<ptr->data<<" "; ptr=ptr->link; } } 以上是我的程式碼,compile沒有錯,但是輸入三個數字之後就當機了 沒辦法 listAll 為什麼-.- 我覺得沒有寫錯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.253.192.142

08/19 22:28, , 1F
寫錯
08/19 22:28, 1F

08/19 22:36, , 2F
請問哪裏錯了,拜託幫解一下,謝
08/19 22:36, 2F

08/19 23:54, , 3F
你的程式在跑完 addNewNode 後,head 依
08/19 23:54, 3F

08/19 23:54, , 4F
然是指向 NULL 的。
08/19 23:54, 4F

08/20 00:11, , 5F
ptr=pNewNode不就是把head指向新結點?
08/20 00:11, 5F

08/20 00:11, , 6F
怎會說還指向NULL ?
08/20 00:11, 6F

08/20 00:15, , 7F
不信就印出來看啊。
08/20 00:15, 7F

08/20 00:19, , 8F
邏輯上除了listAll不會把最後一個值印出
08/20 00:19, 8F

08/20 00:20, , 9F
之外,邏輯是沒錯的,錯在對於傳值和傳址
08/20 00:20, 9F

08/20 00:21, , 10F
的不瞭解。 addNewNode的參數宣告錯誤
08/20 00:21, 10F

08/20 00:50, , 11F
錯慘了...addNewNode 會 mem leak
08/20 00:50, 11F

08/20 13:44, , 12F
你應該去看C_C++板置底文第13戒
08/20 13:44, 12F

08/21 01:13, , 13F
#1GCIkG_S (C_and_CPP) 可以看這篇的推文
08/21 01:13, 13F

09/03 01:25, , 14F
09/03 01:25, 14F
文章代碼(AID): #1GCFCIsU (Programming)