我想知道如何为另一个结构内部的结构数组分配顺序内存。假设我有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;
...
谢谢。
答案 0 :(得分: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]);
答案 1 :(得分: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成员。