该计划中途终止

时间:2014-03-30 18:55:40

标签: c pointers struct stack

我认为在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;
}

我实际上想要放入指向结构的堆栈指针

1 个答案:

答案 0 :(得分:1)

以下三行是一个主要问题:

struct stud a,*p;
p=(struct stud *)malloc(sizeof(a));
p=&a;

在此声明两个局部变量ap,分配内存并使p指向它。您之后直接重新分配 p以指向a变量。这意味着你丢失了你在上一行中分配的内存,并且有内存泄漏。

更糟糕的是,然后将此指针返回到局部变量,并且正如您所知,一旦定义它们的函数返回,局部变量就会超出范围。那么指针指向什么呢?使用此指针会导致未定义的行为