如何为结构数组动态分配内存

时间:2017-01-23 21:15:50

标签: c arrays memory-management struct contiguous

我对C很新,并且无法弄清楚如何将连续内存分配给结构数组。在这个赋值中,我们给出了代码的shell,并且必须填写其余部分。因此,我无法更改变量名称或函数原型。这是给我的:

#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;
}

我只是不确定如何在分配功能中执行这些评论所说的内容。

1 个答案:

答案 0 :(得分:6)

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

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

注意:

  • calloc(),与malloc()不同,将内存块初始化为所有位零。因此,数组中所有元素的字段idscore都已初始化为0
  • 将学生人数作为参数传递给函数allocate()是个好主意。
  • 当您不再需要时,free()分配内存被认为是一种很好的风格。您的教师没有暗示您应该在从free(stud);返回之前调用main():虽然不是绝对必要的(程序退出时系统回收的所有内存都被回收),这是一个好习惯采取并使更容易在更大的程序中找到内存泄漏。