1

我对C相当陌生,并且无法弄清楚如何将连续内存分配给结构数组。在这个作业中,我们得到了一个代码的外壳,并且必须填写其余部分。因此,我无法更改变量名称或函数原型。这是给我的:

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

struct student {
    int id;
    int score;
};

struct student *allocate() {
    /* Allocate memory for ten students */
    /* return the pointer */
}

int main() {
    struct student *stud = allocate();

    return 0;
}

我只是不确定如何去做这些评论在分配函数中所说的内容。

4

1 回答 1

6

分配和初始化数组的最简单方法是:

struct student *allocate(void) {
    /* Allocate and initialize memory for ten students */
    return calloc(10, sizeof(struct student));
}

笔记:

  • calloc(),不像malloc()将内存块初始化为所有位为零。因此,数组中所有元素的字段id和都被初始化为。score0
  • 将学生人数作为参数传递给函数是个好主意allocate()
  • free()当您不再需要它时,分配内存被认为是一种很好的方式。您的讲师没有暗示您应该free(stud);在返回之前调用main():虽然不是绝对必要的(程序分配的所有内存都在程序退出时由系统回收),但这是一个好习惯,可以更容易地定位内存泄漏在较大的程序中。
于 2017-01-23T21:17:46.047 回答