Re: [問題] C語言的link list問題

看板C_and_CPP作者 (薯)時間14年前 (2009/12/13 15:51), 編輯推噓7(7016)
留言23則, 6人參與, 最新討論串3/4 (看更多)
※ 引述《jacky1989 (幻想的夢境)》之銘言: : 我最近在寫link list 所以你想寫一個這樣的東西吧?? □→□→□→□→□→□→□→NULL 如果是的話 來看你的程式 : 不過遇到一點小問題 : #include<alloc.h> : struct list{ : float coef; : int exp; : struct list *nx; : }; : struct list *p1,*fr,*nw,*dl; 在此建了四個point pl→??? fr→??? nw→??? dl→??? : void main() : { : int x,a[]={5,0,4,1,3,2},b[]={6,0,9,2},i; : float y; : p1=(struct list *)malloc(sizeof(struct list)); : nw=(struct list *)malloc(sizeof(struct list)); 跟記憶體要了兩個struct的空間 pl nw ↓ ↓ □→??? □→??? : fr=p1; pl nw ↓ ↓ □→??? □→??? ↑ fr : for(i=1;i<6;i+=2){ : fr->exp=a[i]; : nw->nx=fr; : fr=nw; : nw=0; : } when i = 1; pl ↓ □→ a[1] →??? nw→NULL ↑ fr 上面是經過for迴圈內第一次的執行(when i = 1)後 整體變成這樣 再來看 when i = 3; fr->exp=a[i]; pl ↓ a[3] → a[1] →??? nw→NULL ↑ fr nw->nx=fr; 現在nw已經指向NULL nw→NULL 他哪裡來呢nx 呢?? 為什麼你的程式還可以印=.= : while(fr!=NULL){ : printf("p1x=%d\n",fr->exp); : dl=fr; : fr=fr->nx; : free(dl); : } : } : 我run的時候 : 都會顯示 : Null pointer assignment : 如果不用while寫 : 是可以勉強run的出來 : 不過不管怎麼弄都會有 : Null pointer assignment : 這該怎麼解決阿?? -- 聖露西亞捐款10萬美金 該國人口數僅17萬 silverache:換算過來 平均每個國民捐給我們20幾萬台幣~~啾感心LIONDODO:哇,一個人捐20幾萬… m7cord:好感動,一個人二十萬耶。Q_Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.58.39

12/13 15:53, , 1F
圖形debugger 先進!
12/13 15:53, 1F

12/13 15:54, , 2F
nw的問題解決了,不過現在又有問題就是,要如何印出list
12/13 15:54, 2F

12/13 16:52, , 3F
我用while印,不過每次出來都是2,還是無窮迴圈耶
12/13 16:52, 3F

12/13 17:02, , 4F
你有指向下一個節點嗎?
12/13 17:02, 4F

12/13 17:28, , 5F
有阿,不就是fr=fr->nx?
12/13 17:28, 5F

12/13 18:11, , 6F
真的沒有人有辦法解決我的問題嗎?
12/13 18:11, 6F

12/13 18:24, , 7F
不好意思 nw=0之後就等於沒new 還能用nw->nx嗎?
12/13 18:24, 7F

12/13 18:25, , 8F
抱歉 沒看到已經解決了XD
12/13 18:25, 8F

12/13 18:25, , 9F
另外 不是沒辦法解決你的問題 你把程式改成怎樣誰知道
12/13 18:25, 9F

12/13 18:31, , 10F
ㄜ...我是說...while那部分喔
12/13 18:31, 10F

12/13 18:32, , 11F
我猜你只把nw=0拿掉 還有free(dl)拿掉
12/13 18:32, 11F

12/13 18:32, , 12F
如果我猜對的話 你有沒有發現fr始終指向自己
12/13 18:32, 12F

12/13 18:33, , 13F
fr==fr fr->nx==fr
12/13 18:33, 13F

12/13 18:36, , 14F
不過印出來依然是無窮迴圈耶
12/13 18:36, 14F

12/13 18:37, , 15F
當然是無窮迴圈阿...
12/13 18:37, 15F

12/13 18:38, , 16F
我是說我有修改過了...難道是while的條件不正確嗎?
12/13 18:38, 16F

12/13 18:38, , 17F
那你修改成什麼樣子
12/13 18:38, 17F

12/13 18:39, , 18F
不就是把nw=0 free(dl)拿掉?
12/13 18:39, 18F

12/13 18:40, , 19F
不過我真的不知道fr=fr是在指哪裡
12/13 18:40, 19F

12/13 18:50, , 20F
可能我笨吧....我都不知道你想講什麼
12/13 18:50, 20F

12/13 18:51, , 21F
不好意思是我的表達不清,還是感謝所有回答的人,辛苦了
12/13 18:51, 21F

12/13 22:06, , 22F
l大太有心了, 給您個推:)
12/13 22:06, 22F

12/14 07:59, , 23F
強者 解惑加圖解 我是元PO的話會很感動 XD
12/14 07:59, 23F
文章代碼(AID): #1B99puM9 (C_and_CPP)
文章代碼(AID): #1B99puM9 (C_and_CPP)