这个问题有两种方法解:
1.
对栈的定义不变
seqstack s1;//=NULL;
seqstack *s=&s1;
在主程序中
init(s);
2.修改初始化函数
void init(seqstack **s) /*初始化建立一个空栈*/
{
(*s)=(seqstack*)malloc(sizeof(seqstack));
(**s).top=-1;
printf("\n\nThere is a empty stack!\n");
}
在主程序中
static seqstack *s;
init(&s);
其原因(定义静态变量会默认初值0,这个你应该知道的)是,
1.你没给指针分配空间
2.的init(seqstack *s),按你原来的调用是值传递,如果你单步跟踪后你会发现 s还是0。
所以可以说你对指针的了解老指针指向常规变量的用法,当若改变一个指针的值就应该用
指向指针的指针**p.
另外成熟的算法对分配的内存 结束时一定要释放的,这是好的习惯,如果你做的项目一直跑个
一年半载不重启,这样内存早晚会被程序吃光的。
好累 给分啊
你static seqstack *s;声明之后没初始化。需要申请一块内存给s。 我给你main里面printf前面修改了一下
static seqstack *s;
int sobj[Maxsize+1];
DataType e;
int ret,n,i,len;
s = (struct seqstack*)(&sobj);
试试呢?