gpt4 book ai didi

c - 程序中途终止

转载 作者:行者123 更新时间:2023-11-30 15:35:56 24 4
gpt4 key购买 nike

我认为在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=push(堆栈,&head,&n,p);

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;

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

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

关于c - 程序中途终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com