gpt4 book ai didi

c - 具有结构数组的程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:20 25 4
gpt4 key购买 nike

我有一个包含多个结构的数组。当我第一次要求用户输入数据时,一切正常,但是当我再次询问数组中的下一个位置时,程序崩溃了。如果这个方法不行,难道程序一开始就崩溃了吗? malloc 有问题吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



struct student {
char name[50];
int semester;
};

struct prof {
char name[50];
char course[50];
};

struct student_or_prof {
int flag;
int size;
int head;
union {
struct student student;
struct prof prof;
}
}exp1;
struct student_or_prof *stack;


void init(int n)
{
stack = malloc(n);


}

int push(struct student_or_prof **pinx,int *head,int n)
{
char name[50];

printf("\nn= %d\n",n);
printf("\nhead= %d\n",*head);
if(*head==n)
{
printf("Stack is full.\n");
return 1;
}


char x;
printf("Student or Professor? [s/p] ");
getchar() != '\n';
scanf("%c",&x);

if(x=='s')
{

getchar() != '\n';
pinx[*head]->flag = 0;

printf("\n\nGive student's name: ");
fgets(pinx[*head]->student.name,sizeof(pinx[*head]->student.name),stdin);

printf("\nGive student's semester: ");
scanf("%d",&(pinx[*head]->student.semester));

printf("\nName = %s\tSemester = %d",pinx[*head]->student.name,pinx[*head]->student.semester);

}
else if(x=='p')
{
getchar() != '\n';
pinx[*head]->flag = 1;

printf("\n\nGive professor's name: ");
fgets(pinx[*head]->prof.name,sizeof(pinx[*head]->prof.name),stdin);

printf("\nGive course: ");
fgets(pinx[*head]->prof.course,sizeof(pinx[*head]->prof.course),stdin);

printf("\nName = %s\tCourse = %s\n",pinx[*head]->prof.name,pinx[*head]->prof.course);
}



(*head)++;
printf("\nhead= %d\n",*head);



}


int main()
{
int n,i;
printf("Give size: ");
scanf("%d",&n);

init(n);

for(i=0;i<n;i++)
push(&stack,&exp1.head,n);

return 0;
}

最佳答案

你需要malloc结构而不是n

malloc(sizeof(struct student_or_prof)*n)

编辑:

然后你的代码又崩溃了,因为pinx是一个双指针,所以这个操作是无效的:

pinx[*head]->flag = 0;

这相当于:

*(pinx + *head)->flag = 0;

由于您没有更改stack 指向的内容,因此最好使用单指针而不是双指针。

因此,您应该更改您的 push API:

int push(struct student_or_prof *pinx,int *head,int n)

并这样调用它:

push(stack,&exp1.head,n);

关于c - 具有结构数组的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699795/

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