求教大佬们,学习C语言数据结构参考伪代码写出如下代码,但是每次运行后都会报错“0x00007FF6929B1AD1 处(位于 栈(顺序表).exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFFF61E9C90 时发生访问冲突。”不知道是什么原因。
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __DEFINE_H
#define __DEFINE_H
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#endif
#include<stdio.h>
#define MAXSTACK 100
typedef char StackElemType; //栈数据类型
typedef struct __SqStack //顺序栈,最常用
{
StackElemType* base;
StackElemType* top;
int stacksize;
} SqStack;
Status InitStack(SqStack* S) {
S->base = (StackElemType*)malloc(sizeof(StackElemType) * MAXSTACK);
if (!S->base)
exit(OVERFLOW);
S->top = S->base; //栈顶和指向栈底
S->stacksize = MAXSTACK; //栈的容量
return OK;
}
Status Push(SqStack* S, StackElemType e) {
if (S->top - S->base == S->stacksize)
return ERROR; //表示此时栈满
*(S->top++) = e; // top指向内存单元存放e,且top指向下一个内存单元
return OK;
}
Status Pop(SqStack* S, StackElemType* e) {
if (S->base == S->top)
return ERROR; //栈空
*e = *(--(S->top));
return OK;
}
Status IsEmpty(SqStack* S) {
if (S->base == S->top)
return TRUE;
else
return FALSE;
}
Status IsFull(SqStack* S) {
if (S->top - S->base == S->stacksize)
return TRUE;
else
return ERROR;
}
StackElemType GetTop(SqStack* S) {
if (!IsEmpty(S))
return *(S->top - 1);
}
int main(void)
{
SqStack S;
InitStack(&S);
Push(&S, 'A');
Push(&S, 'B');
Push(&S, 'C');
Push(&S, 'C');
while (!IsEmpty(&S))
{
StackElemType e;
Pop(&S, &e);
printf("%c ", e);
}
system("pause");
return 0;
}