使用malloc为数组分配内存

时间:2016-12-14 17:43:26

标签: c arrays memory memory-management

我正在尝试通过使用malloc来分配所需的内存来创建一个结构数组,如下所示:

typedef struct stud{
   char stud_id[MAX_STR_LEN];
   char stud_name[MAX_STR_LEN];
   Grade* grd_list;
   Income* inc_list;
}Stud;

Stud* students = malloc(sizeof(Stud)*STUDENT_SIZE);

问题是我有一个函数可以将idname添加到数组中的某个位置,如下所示:

void new_student(Stud* students[], int stud_loc){
   scanf("%s", students[stud_loc]->stud_id);
   printf("%s", students[stud_loc]->stud_id);
   scanf("%s", students[stud_loc]->stud_name);
   printf("%s", students[stud_loc]->stud_name); 
}

但是在第一次调用该函数后,第二个函数给出了错误:

Segmentation fault (core dumped)

我只能认为它必须意味着我没有做到这一点,所有的记忆都可能进入一个地方而不是数组形式。我宁愿做

  Stud students[STUDENT_SIZE];

但在这种情况下我必须使用malloc。

我尝试使用calloc但仍然遇到同样的错误。

1 个答案:

答案 0 :(得分:4)

局部变量Stud *students与函数参数Stud *students[]之间存在不匹配。这两个变量应该具有相同的类型。

局部变量和malloc()看起来很好。 new_student有一个不受欢迎的额外指针层。它看起来应该是这样的:

void new_student(Stud* students, int stud_loc){
   scanf ("%s", students[stud_loc].stud_id);
   printf("%s", students[stud_loc].stud_id);
   scanf ("%s", students[stud_loc].stud_name);
   printf("%s", students[stud_loc].stud_name); 
}

然后你会这样称呼它:

Stud* students = malloc(sizeof(Stud)*STUDENT_SIZE);

new_student(students, 0);
new_student(students, 1);
new_student(students, 2);