我认为在stud()
结束后终止struct stud
{
int flag;
char surname[90];
int semester;
};
int prepush(int *stack,int *head,int *n)
{
int c,r;
int *p;
printf("[1].Add Student\n");
printf("[2].Add Proffesor\n");
do
{
printf("Pick:");
scanf("%d",&c);
getchar();
}while(c!=1&&c!=2);
switch(c)
{
case 1:p=stud();break;
case 2:p=prof();break;
}
r=push(stack,&head,&n,p);
return r;
}
我不知道该返回什么,所以我可以把它放在我的堆栈中......或者什么
int stud()
{
struct stud a,*p;
p=(void *)malloc(sizeof(a));
p->flag=1;
printf("Give surname:");
gets(p->surname);
printf("\nGive semester:")
scanf("%d",p->semester);
return p;
}
这就是我所说的 R =推(堆栈,&安培;头,&安培; N,P);
int push(int *stack,int *head,int *n,int *p)
{
if(*head==*n)
return 0;
stack[*head++]=p;
return 1;
}
我实际上想要放入指向结构的堆栈指针
答案 0 :(得分:1)
以下三行是一个主要问题:
struct stud a,*p;
p=(struct stud *)malloc(sizeof(a));
p=&a;
在此声明两个局部变量a
和p
,分配内存并使p
指向它。您之后直接重新分配 p
以指向a
变量。这意味着你丢失了你在上一行中分配的内存,并且有内存泄漏。
更糟糕的是,然后将此指针返回到局部变量,并且正如您所知,一旦定义它们的函数返回,局部变量就会超出范围。那么指针指向什么呢?使用此指针会导致未定义的行为。