4

我想知道如何为另一个结构内的结构数组分配顺序内存。假设我有 struct1,它有一个 struct2 数组,我想把它全部放在一个连续的内存块中。

我可以使用 malloc 来分配块,但我将如何分配数组的内存?

struct1 *set = malloc(sizeof(struct1) + sizeof(struct2)*number_of_structs);
set->arr = (struct2*)set + sizeof(struct); //This is probably wrong
set->arr[0].data = 1;
set->arr[1].data = 2; 
...

谢谢你。

4

2 回答 2

3

使用灵活的数组成员

#define NUM_ELEM  42

struct a {
   /* whatever */    
};

struct b {
    int c;
    struct a d[];  // flexible array member
};

struct b *x = malloc(sizeof *x + NUM_ELEM * sizeof x->d[0]);
于 2012-10-09T18:54:09.827 回答
2

这种方式在一些 Windows API 中使用,它可能看起来像这样:

struct struct1
{
     // some members ...

     struct struct2 arr[1];
}

struct1 *set = malloc(sizeof(struct1) + sizeof(struct2) * (number_of_structs-1));

set->arr 指向number_of_structs成员数组。struct1 始终包含至少一个 struct2 内部 + 连续内存块中的其他 struct2 成员。

于 2012-10-09T18:56:12.447 回答