C 程序中途终止

C 程序中途终止,c,pointers,struct,stack,C,Pointers,Struct,Stack,我想在螺柱()结束后终止 我不知道该返回什么,这样我就可以把它放在我的堆栈中..地址还是什么 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; }

我想在螺柱()结束后终止

我不知道该返回什么,这样我就可以把它放在我的堆栈中..地址还是什么

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)


实际上,我想将指向结构的指针放入堆栈中,以下三行是一个主要问题:

struct stud a,*p;
p=(struct stud *)malloc(sizeof(a));
p=&a;
这里声明两个局部变量
a
p
,分配内存并使
p
指向它。然后直接重新指定
p
以指向
a
变量。这意味着您丢失了在前一行中分配的内存,并且出现了内存泄漏


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

如果您使用的是64位系统,您会遇到大麻烦,因为
int
的大小是32位,而指针是64位。您仍然不应该使用
int
存储指针。那么我应该更改什么?有一种通用指针类型,例如由
malloc
的返回类型使用。它被称为void指针,
void*
。好的,我明白了。那么我可以在堆栈中放入什么来显示我从stud()创建的结构呢我该怎么办return@KazaMaster您需要将
a
的内容复制到
p
所指的位置,然后您可以像代码一样返回
p
的地址。正如Joachim指出的,您当前的代码丢弃了分配的内存,并让
p
指向
a
的地址,该地址在函数结束时超出范围。我仍然不知道要更改什么,因此可以将结构存储到我的stack@KazaMaster如果要在堆栈中存储多个结构,您可能想了解联合。我不能在堆栈中存储其结构的地址吗?
int push(int *stack,int *head,int *n,int *p)
{
  if(*head==*n)
    return 0;   
  stack[*head++]=p;
  return 1;
}
struct stud a,*p;
p=(struct stud *)malloc(sizeof(a));
p=&a;