【问题标题】:C array of structs in malloc [closed]malloc中的C结构数组[关闭]
【发布时间】:2018-12-22 22:35:50
【问题描述】:
有没有最好的方法来使用 malloc 创建驻留在堆中的结构数组?具体来说,如果我最初在堆上创建数组但无法预先创建每个条目,我仍然希望能够创建结构/条目并将它们驻留在堆中并可以从结构中访问。有没有好的/规范的方法来做到这一点?
【问题讨论】:
-
我不确定你在问什么。当您使用 malloc/calloc 时,内存是在堆上分配的。阅读this post了解更多详情
-
标签:
c
struct
malloc
heap-memory
【解决方案1】:
如果你的结构是在堆上分配的,你也可以声明并分配一个指向堆上每个结构的指针数组:
struct my_struct **struct_arr = malloc(sizeof(struct my_struct *) * ARR_LEN);
其中 ARR_LEN 是您希望存储在数组中的结构的数量。在这种情况下,
struct_arr[0]
是 *struct my_struct 类型(指向 my_struct 的指针)。
所以现在,您可以在堆内存中分配一个 my_struct 结构,如下所示:
struct my_struct *struct_ptr = malloc(sizeof(struct my_struct));
并将生成的指针存储到上面的结构数组中:
struct_arr[0] = struct_ptr;
【解决方案2】:
分配内存是通过malloc/realloc/calloc。这不是唯一的方法,但这是符合 ISO C 标准的。
在访问方面,它不是由分配变量的位置(堆栈,堆或任何地方)定义的,它是由访问该堆内存的方式的范围定义的(确定范围你可以使用关键字volatile、局部变量等)。
关于结构,您必须“保留”足够大的内存来分配数组。一旦获得指向保留的内存束的指针,您就可以使用它(在这种情况下,对于您的结构),例如:
struct structType {
int varA;
};
struct structType *structP = malloc(sizeof(struct structType));
structP->varA = 1;