- 論壇徽章:
- 0
|
代碼如下(縮略一部分)
typedef struct LNODE{
Elemtype data;
struct LNODE *next;
}LNode,*Linklist;
寫出出錯(cuò)的功能函數(shù)
Linklist Findlist(Linklist head,int i) /* 找到指向第i個(gè)節(jié)點(diǎn)的指針*/
{
int j=0;
Linklist ftemp;
ftemp=head;
for(j=0;j<i;j++){
ftemp=ftemp->next;
if(ftemp->next==NULL&&j<i-1){ printf ("number is none"); exit(1);}
}
return ftemp;
}
int Listinsert(Linklist L,int i,Elemtype e) /*插到第i個(gè)節(jié)點(diǎn)*/
{
Linklist p=NULL;
Linklist q=NULL;
p=Findlist(L,i-1);/*找到第i-1個(gè)節(jié)點(diǎn)*/
q=(Linklist)malloc(sizeof(LNode));
if(!q) return ERROR;
q->next=p->next;
p->next=q;
return OK;
}
int Createlist(Linklist L,int num) /*num 通過輸入開始要建立的節(jié)點(diǎn)個(gè)數(shù),此函數(shù)結(jié)合其他函數(shù)完成創(chuàng)建鏈表*/
{
int i=0;
Elemtype e;
Elemtype *pe=&e;
for(i=0;i<num;i++){
getdata(pe); /* 通過函數(shù)給數(shù)據(jù)賦值*/
Listinsert(L,i+1,e) /*插到第i+1個(gè)節(jié)點(diǎn)(因?yàn)榇随湵硪呀?jīng)建立了頭結(jié)點(diǎn));
}
return OK;
}
問題來了!。! 編譯都可以通過,但是調(diào)試的時(shí)候,提示core dump,通過GDB,發(fā)現(xiàn)當(dāng)函數(shù)運(yùn)行時(shí),運(yùn)行到Findlist();假如說第一次,Createlist的i=0,傳給Listinser的第二個(gè)參數(shù)是1,本來在傳給Findlist()的時(shí)候,應(yīng)該穿的是0;但是gdb顯示當(dāng)前傳的值是808464432。。!
|
|