没有报错,为什么运行结果显示下溢错误

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef int DataType;
typedef struct Node
{
DataType data;
struct Node*next;
} Node;

void InitStack(Node*top)
{
top=NULL;
}

void DestroyStack(Nodetop)
{
Node
p = top;
while(p!=NULL)
{
top=top->next;
free(p);
p = top;
}
}

void Push(Nodetop,DataType x)
{
Node
s = (Node*)malloc(sizeof(Node));
s->data = x;
s->next = top;
top = s;
}

int Pop(Nodetop,DataTypeptr)
{
Node*p = top;
if(top==NULL)
{
printf("下溢错误,删除失败\n");
return 0;
}
*ptr = top->data;
top = top->next;
free(p);
return 1;
}

int GetTop(Nodetop,DataTypeptr)
{
if(top==NULL)
{
printf("下溢错误,取栈顶失败\n");
return 0;
}
*ptr = top->data;
return 1;
}

int Empty(Node*top)
{
if(top==NULL)
return 1;
else return 0;
}

int main()
{
DataType x;
Node*top = NULL;
InitStack(top);
printf("对15和10执行入栈操作,");
Push(top,15);
Push(top,10);
if(GetTop(top,&x)==1)
printf("当前栈顶元素为:%d\n",x);
if(Pop(top,&x)==1)
printf("执行一次出栈操作,删除元素:%d\n",x);
if(GetTop(top,&x)==1)
printf("当前栈顶元素为:%d\n",x);
printf("请输入待入栈元素:");
scanf("%d",&x);
Push(top,x);
if(Empty(top)==1)
printf("栈为空\n");
else
printf("栈非空\n");
DestroyStack(top);
return 0;
}

img

void Push(Nodetop,DataType x)
{
Nodes = (Node*)malloc(sizeof(Node));

这里, 应该是Node *s。