有没有最好的方法来创建一个使用malloc驻留在堆中的结构数组?特别是,如果我最初在堆上创建数组,但无法提前创建每个条目,我仍然希望能够创建结构/条目,并将它们驻留在堆中,并且可以从结构中访问。有什么好的/规范的方法可以做到这一点吗?
如果你的结构是在堆上分配的,你也可以声明并分配一个指向堆上每个结构的指针数组:
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;
分配内存是通过malloc/realloc/calloc。这不是唯一的方法,但这是符合ISO C标准的。
就访问而言,它不是由变量的分配位置(堆栈、堆或任何位置(定义的,而是由访问内存堆的方式的范围定义的(为了确定范围,可以使用关键字volatile
、局部变量等(。
对于structs,您必须"保留"足够大的内存来分配数组。一旦你得到了指向保留内存的指针,你就可以使用它(在这种情况下,用于你的结构(,比如:
struct structType {
int varA;
};
struct structType *structP = malloc(sizeof(struct structType));
structP->varA = 1;