如题
还有一句报错是CRT检测到应用程序在缓冲区结束后写入内存

下面是我的代码
看不出哪错了
#include <stdio.h>
#include <stdlib.h>
//定义
typedef struct Linknode{
int data;
struct Linknode* next;
}*LiStack;
//初始化
void InitStack(LiStack* S) {
*S = (LiStack)malloc(sizeof(LiStack));
(*S)->next = NULL;
}
//判空
int StackEmpty(LiStack S) {
if (S->next == NULL)
return 1;
return 0;
}
//入栈
void Push(LiStack S, int x) {
LiStack q = (LiStack)malloc(sizeof(LiStack));
q->data = x;
q->next = S->next;
S->next = q;
}
//出栈
int Pop(LiStack S, int* x) {
if (StackEmpty(S))
return 0;
LiStack r = S->next;
x = r->data;
S->next = r->next;
free(r);
return 1;
}
//打印链栈
void PrintStack(LiStack S) {
LiStack r = S->next;
while (r) {
printf("%d -> ", r->data);
r = r->next;
}
printf("NULL");
}
void main() {
LiStack S;
int x;
InitStack(&S);
for (int i = 1; i < 6; i++) {
Push(S, i);
printf("%d入栈完成\n", i);
}
printf("出栈顺序:");
for (int i = 0; i < 5; i++) {
Pop(S, &x);
printf("%d\t", x);
}
printf("\n");
printf("入栈顺序:");
for (int i = 3; i > 0; i--) {
Push(S, i);
printf("%d\t", x);
}
printf("\n");
printf("出栈顺序:");
for (int i = 0; i < 2; i++) {
Pop(S, &x);
printf("%d\t", x);
}
printf("\n");
printf("入栈顺序:");
for (int i = 4; i < 8; i++) {
Push(S, i);
printf("%d\t", x);
}
printf("\n");
printf("出栈顺序:");
for (int i = 0; i < 5; i++) {
Pop(S, &x);
printf("%d\t", x);
}
printf("\n");
}