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;