【问题标题】:C array of structs in malloc [closed]malloc中的C结构数组[关闭]
【发布时间】:2018-12-22 22:35:50
【问题描述】:

有没有最好的方法来使用 malloc 创建驻留在堆中的结构数组?具体来说,如果我最初在堆上创建数组但无法预先创建每个条目,我仍然希望能够创建结构/条目并将它们驻留在堆中并可以从结构中访问。有没有好的/规范的方法来做到这一点?

【问题讨论】:

  • 我不确定你在问什么。当您使用 malloc/calloc 时,内存是在堆上分配的。阅读this post了解更多详情
  • 嗯,在堆上分配的最好方法是使用 malloc。

标签: 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;  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多