我正在尝试组合某个结构,以获取将传递给函数的信息。此函数将地址和大小作为参数。此外,信息的结构由技术文档给出,但包含动态部分。动态部分由重复的结构组成 因此,我想到在结构中使用结构数组。
最小的例子可能如下所示:
struct nodeConfig_s{
int pdoCount;
int somethingElse;
struct pdo_s{
int flags;
int dataLength;
int id;
} pdos[];
}
我明白pdos[]
只是指向数组第一个元素的指针
但我想要实现的是结构数组将放在与外部结构相同的内存区域中。
有没有办法实现这一目标?应该注意的是,我依赖于GNU / Linux内核模块中可用的功能(2.6.37.6)
如果有办法管理链表中的信息(很容易消耗)并将它们放在一个内存块中(序列化?),我将不胜感激。
从文档中我知道pdos[]
的最大大小是255,但我真的想避免定义那个大小的数组并浪费所有内存。
答案 0 :(得分:1)
保留指向结构的指针
struct pdo_s *pdos;
并动态分配内存
pdos = malloc(sizeof(struct pdo_s));
通过这种方式,您可以通过在同一指针上执行realloc()
来分配所需的内存并继续增加内存。
或
您可以在堆或堆栈上一次分配255个结构。
pdos = malloc(sizeof(struct pdo_s) * 255);
或
struct pdo_s pdos[255];