用 vc编译时出现Unhandled exception at 0x00d913d1 in a栈和队列.exe: 0xC0000005: Access violation wri

2025-04-08 04:45:27
推荐回答(2个)
回答1:

这个问题有两种方法解:
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.

另外成熟的算法对分配的内存 结束时一定要释放的,这是好的习惯,如果你做的项目一直跑个
一年半载不重启,这样内存早晚会被程序吃光的。

好累 给分啊

回答2:

你static seqstack *s;声明之后没初始化。需要申请一块内存给s。 我给你main里面printf前面修改了一下
static seqstack *s;
int sobj[Maxsize+1];
DataType e;
int ret,n,i,len;
s = (struct seqstack*)(&sobj);

试试呢?