c语言链栈运行时触发断点求解求解

#include
#include
#define P1
#ifdef P1
typedef struct
{
char name[50];
int age;
}DataType;

typedef struct stacknode
{
DataType data;
struct stacknode *next;
}StackNode;

typedef struct
{
StackNode *top;
}LinkStack;

StackNode *StackInit(void)
{
StackNode *p;
if (p = ((StackNode *)malloc(sizeof(StackNode))))
{
p->next = NULL;
return p;
}
return NULL;
}

void InitStack(LinkStack *s)
{
s->top = NULL;
}

int StackEmpty(LinkStack *s)
{
return s->top == NULL;
}

void Push(LinkStack *s, DataType x)
{
StackNode *p = (StackNode *)malloc(sizeof(StackNode));
InitStack(s);
p -> data = x;
p->next = s->top;
s->top = p;
}

DataType Pop(LinkStack *s)
{
DataType x;
StackNode *p = s;
if (StackEmpty(s))
{
printf("stack underflow");
}
x = p->data;
s->top = p->next;
free(p);
return x;
}

DataType StackTop(LinkStack *s)
{
if (StackEmpty(s))
{
printf("stack is empty");
}
return s->top->data;
}

int main(void)
{
StackNode *stack;
DataType data, data1;

stack = StackInit();
printf("接下来进行入栈操作!\n");
printf("按照 姓名 年龄依次输入信息:  ");
scanf("%s%d", data.name, &data.age);
Push(stack, data); printf("按照 姓名 年龄依次输入信息:  ");
scanf("%s%d", data.name, &data.age);
Push(stack, data);



printf("接下来进行出栈操作!\n");
data1 = Pop(stack);
printf("出栈操作的数据是(%s,%d)\n", data1.name, data1.age);
data1 = Pop(stack);
printf("出栈操作的数据是(%s,%d)\n", data1.name, data1.age);

system("pause");
return 0;

}
#endif

 lude<stdio.h>
#include<stdlib.h>
typedef struct
{
    char name[50];
    int age;
}DataType;
typedef struct stacknode
{
    DataType data;
    struct stacknode *next;
}StackNode;
typedef struct
{
    StackNode *top;
}LinkStack;
StackNode *StackInit(void)
{
    StackNode *p;
    if (p = ((StackNode *)malloc(sizeof(StackNode))))
    {
        return NULL;
    }
    p->next = NULL;
    return p;
}
void InitStack(LinkStack *s)
{
    s->top=(StackNode*)malloc(sizeof (StackNode));
    s->top->next=NULL;
}
int StackEmpty(LinkStack *s)
{
    return s->top == NULL;
}
void Push(LinkStack *s, DataType x)
{
    StackNode *p = (StackNode *)malloc(sizeof(StackNode));
    p -> data = x;
    p->next = s->top;
    s->top=p;
}
DataType Pop(LinkStack *s)
{
    DataType x;
    StackNode *p = s->top;
    if (StackEmpty(s))
    {
        printf("stack underflow");
    }
    x = p->data;
    s->top = p->next;
    free(p);
    return x;
}
DataType StackTop(LinkStack *s)
{
    if (StackEmpty(s))
    {
        printf("stack is empty");
    }
    return s->top->data;
}
int main(void)
{
    LinkStack s;
    LinkStack *stack;
    stack=&s;
    DataType data, data1;
    InitStack(stack);
    printf("接下来进行入栈操作!\n"); 
    printf("按照姓名年龄依次输入信息: "); 
    scanf("%s%d", data.name, &data.age); 
    Push(stack, data);
    printf("按照姓名年龄依次输入信息: "); 
    scanf("%s%d", data.name, &data.age); 
    Push(stack, data); 
    printf("接下来进行出栈操作!\n"); 
    data1 = Pop(stack); 
    printf("出栈操作的数据是(%s,%d)\n", data1.name, data1.age); 
    data1 = Pop(stack); 
    printf("出栈操作的数据是(%s,%d)\n", data1.name, data1.age); 
    return 0;
}