作者liu2007 (薯)
看板C_and_CPP
標題Re: [問題] C語言的link list問題
時間Sun Dec 13 15:51:16 2009
※ 引述《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
推 netsphere:圖形debugger 先進! 12/13 15:53
→ jacky1989:nw的問題解決了,不過現在又有問題就是,要如何印出list 12/13 15:54
→ jacky1989:我用while印,不過每次出來都是2,還是無窮迴圈耶 12/13 16:52
推 joefaq:你有指向下一個節點嗎? 12/13 17:02
→ jacky1989:有阿,不就是fr=fr->nx? 12/13 17:28
→ jacky1989:真的沒有人有辦法解決我的問題嗎? 12/13 18:11
推 taiwan2000:不好意思 nw=0之後就等於沒new 還能用nw->nx嗎? 12/13 18:24
→ taiwan2000:抱歉 沒看到已經解決了XD 12/13 18:25
→ taiwan2000:另外 不是沒辦法解決你的問題 你把程式改成怎樣誰知道 12/13 18:25
→ jacky1989:ㄜ...我是說...while那部分喔 12/13 18:31
推 taiwan2000:我猜你只把nw=0拿掉 還有free(dl)拿掉 12/13 18:32
→ taiwan2000:如果我猜對的話 你有沒有發現fr始終指向自己 12/13 18:32
→ taiwan2000:fr==fr fr->nx==fr 12/13 18:33
→ jacky1989:不過印出來依然是無窮迴圈耶 12/13 18:36
推 taiwan2000:當然是無窮迴圈阿... 12/13 18:37
→ jacky1989:我是說我有修改過了...難道是while的條件不正確嗎? 12/13 18:38
→ taiwan2000:那你修改成什麼樣子 12/13 18:38
→ jacky1989:不就是把nw=0 free(dl)拿掉? 12/13 18:39
→ jacky1989:不過我真的不知道fr=fr是在指哪裡 12/13 18:40
→ taiwan2000:可能我笨吧....我都不知道你想講什麼 12/13 18:50
→ jacky1989:不好意思是我的表達不清,還是感謝所有回答的人,辛苦了 12/13 18:51
推 VictorTom:l大太有心了, 給您個推:) 12/13 22:06
推 Gway:強者 解惑加圖解 我是元PO的話會很感動 XD 12/14 07:59