c - 在堆内存数组中分配指向结构的指针

标签 c struct heap-memory

我正在尝试通过使用像这样的结构来制作简单的数据库

struct Employee{
    char* name;
    int ID;
    int GPA;
    int salary;
};

我知道如何使用它在堆中分配一个结构类型的指针

struct Employee* emp=malloc(sizeof(Employee));

我现在的问题是我不太擅长分配进程,我想要 在堆中分配 N 个结构指针,我不能使用数组,因为直到运行时才知道大小 有什么建议 ?

最佳答案

是的,您需要动态分配内存,即为每个新的 struct Employee 分配一个新的堆 block 。

例如,您可以在大小更改时使用 realloc 执行此操作:

yourArrayPtr=realloc(yourArrayPtr,newsize * sizeof(struct Employee));

realloc 函数主要是为其返回值指向的数据分配新的内存量。这是扩展或收缩动态分配数组的便捷方式。 newsize 这里是数组元素的新数量,它乘以一个 Employee 结构的大小,呈现新数组所需的空间总量。 realloc 的返回值被分配给你的数组指针,因此它专门指向这个新分配的空间。在这种情况下,它可以像这样使用:

struct Employee* emp= NULL;

然后在您需要时:

int n = 8;
emp = realloc (emp, n * sizeof(struct Employee));

请记住,您仍然需要释放此内存。

您现在可以初始化和访问此数据:

emp[3] = {value1, value2, value3, ...};

就结构而言,您还可以想到另一种数据结构 - 链表,其中每个结构都包含指向其后继者的指针。您可以在这里阅读:http://www.cprogramming.com/tutorial/c/lesson15.html

在你的情况下,它会是这样的:

struct Employee{
    char* data;
    struct Employee* next;
};

关于c - 在堆内存数组中分配指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527594/

相关文章:

c - 下面两个例子编译后会占用相同的内存吗?

c - 即使没有来自用户的输入,字符串也有内容

这个 memcpy 会导致未定义的行为吗?

c - 在指针上使用成员访问运算符

c - 链表内存问题

arrays - C 在堆数组中搜索字符串

c++ - 尝试学习类(class)和 'heap' c++

c - 2 个 fget 一个接一个,第一个在第一次之后被跳过

c - 在C中运行程序后抓取在控制台中输入的文本

c - 为什么 sizeof(x++) 不增加 x?