为什么顺序栈的输入超出5个时候就出错啊?

来源:百度知道 编辑:UC知道 时间:2024/06/13 23:12:40
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define maxsize 100
typedef int datatype;
typedef struct lnode
{
datatype data[maxsize];
int length;
}seqlist;
void init(seqlist *l)
{
l=(seqlist *)malloc(sizeof(seqlist));
l->length=0;
}
void input(seqlist *l)
{
int i=0;
datatype x;
do{
scanf("%d",&x);
if(x==0)
break;
l->data[i]=x;
i++;
(l->length)++;
}
while(i<maxsize);
}

int main()
{
seqlist *l;
init(l);
input(l);
int i;
for(i=0;i<(l->length);i++)
printf("%d\n",l->data[i]);
printf("%d",l->length);
return 0;
}

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define maxsize 100
typedef int datatype;
typedef struct lnode
{
datatype data[maxsize];
int length;
}seqlist;
void init(seqlist **l)
{
*l=(seqlist *)malloc(sizeof(seqlist));
(*l)->length=0;
}
void input(seqlist *l)
{
int i=0;
datatype x;
do{
scanf("%d",&x);
if(x==0)
break;
l->data[i]=x;
i++;
(l->length)++;
}
while(i<maxsize);
}

int main()
{
seqlist *l;
init(&l);
input(l);
int i;
for(i=0;i<(l->length);i++)
printf("%d\n",l->data[i]);
printf("%d",l->length);
free(l);
return 0;
}

你对形参和值参理解不足。
void init(seqlist *l)
l 是值参,调用后这个值是不变的。要变必须用 **