请各位大神帮小弟我看上这代码的有关问题

请各位大神帮我看下这代码的问题
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"

typedef struct
{
int x, y; //坐标
int dir; //方向
}ElemType;

typedef struct StackNode//构造栈
{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;


typedef struct 
{
int maze[100][100];
}MG;


int InitStack(SqStack *head)//初始化栈
{
head->base=(ElemType *)malloc(100*sizeof(ElemType));
if(!head->base)
{
printf("memory allocation failed,goodbye");
exit(1);
}
head->top=head->base;
head->stacksize=100;
return 1;
}

int Push(SqStack *head,ElemType e)//进栈操作
{
if(head->top-head->base>=head->stacksize)
{
head->base = (ElemType *)realloc(head->base,(head->stacksize+10)*sizeof(ElemType));
if (!head->base)
{
printf("memory allocation failed,goodbye");
exit(1);
}
head->top =head->base+head->stacksize;
head->stacksize +=10;
}
*head->top++=e;
return 1;
}

int Pop(SqStack *head,ElemType *e)//出栈操作
{
if(head->top==head->base)
{
return 0;
}
*e=*--head->top;
//printf("%d\n",e);

int GetPOp(SqStack *head,ElemType *e);
{
if(head->top==head->base)
return 0;
e=(head->top-1);
return 1;
}



/*int StackEmpty(SqStack *head)//判断栈是否为空
{
if(head->top==head->base)
return 1;
else
return 0;
}*/

MG printmazeA(MG ma)
{
int maze[10][10]=
{{0,0,0,0,0,0,0,0,0,0},
{0,2,1,0,1,1,1,0,1,0},
{0,1,1,0,1,1,1,0,1,0},
{0,1,1,1,1,0,0,1,1,0},
{0,1,0,0,0,1,1,1,1,0},
{0,1,1,1,0,1,1,1,1,0},
{0,1,0,1,1,1,0,1,1,0},
  {0,1,0,0,0,1,0,0,1,0},
{0,0,1,1,1,1,1,1,2,0},
{0,0,0,0,0,0,0,0,0,0}
};

for(int i=0;i<10;i++)
{
printf("\n");
for(int j=0;j<10;j++)
{
if(maze[i][j]==1)
printf("□");
if(maze[i][j]==0)
printf("■");
if(maze[i][j]==0)
printf("☆");

}
}
for(int i=0;i<10;i++ )
{
for(int j=0;j<10;j++)
{
ma.maze[i][j]=maze[i][j];
}
}

return ma;
}






void findway(SqStack *head,MG ma)
{
int startx=1,starty=1,endx=8,endy=8;
road *a;
road *e;
e.x=startx;
e.y=starty;
e.dir=0;
do
{
switch(e.dir)
{
case 0:{
e.y++;
a=GetTop(head ,e);
if(a.x==e.x&&a.y==e.y)
{
e.dir++;
}
if(ma.maze[e.x][e.y]==0)
{
e.dir++;
break;
}
else
{
Push(head,e);
e.dir=0;
break;
}
}
case 1:{
e.x++;
a=GetTop(head ,e);
if(a.x==e.x&&a.y==e.y)
{
e.dir++;
}
if(ma.maze[e.x][e.y]==0)
{
e.dir++;
break;
}
else
{
Push(head,e);
e.dir=0;
break;
}
}
case 2:{
e.y--;
a=GetTop(head ,e);
if(a.x==e.x&&a.y==e.y)
{
e.dir++;
}
if(ma.maze[e.x][e.y]==0)
{
e.dir++;
break;
}
else
{
Push(head,e);
e.dir=0;
break;
}
}
case 3:{
e.x--;
a=GetTop(head ,e);
if(a.x==e.x&&a.y==e.y)
{
e.dir++;
}
if(ma.maze[e.x][e.y]==0)