- 论坛徽章:
- 0
|
代码如下(缩略一部分)
typedef struct LNODE{
Elemtype data;
struct LNODE *next;
}LNode,*Linklist;
写出出错的功能函数
Linklist Findlist(Linklist head,int i) /* 找到指向第i个节点的指针*/
{
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个节点*/
{
Linklist p=NULL;
Linklist q=NULL;
p=Findlist(L,i-1);/*找到第i-1个节点*/
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 通过输入开始要建立的节点个数,此函数结合其他函数完成创建链表*/
{
int i=0;
Elemtype e;
Elemtype *pe=&e;
for(i=0;i<num;i++){
getdata(pe); /* 通过函数给数据赋值*/
Listinsert(L,i+1,e) /*插到第i+1个节点(因为此链表已经建立了头结点);
}
return OK;
}
问题来了!!!! 编译都可以通过,但是调试的时候,提示core dump,通过GDB,发现当函数运行时,运行到Findlist();假如说第一次,Createlist的i=0,传给Listinser的第二个参数是1,本来在传给Findlist()的时候,应该穿的是0;但是gdb显示当前传的值是808464432!!!!
|
|