为结构内的联合数组动态分配内存
Dynamically allocate memory for an array of unions inside a struct
我不确定我是否正在接近这个正确的方法,但我想做的是为结构内的联合数组动态分配内存,我可以使用
Registers regs[20];
但我不想固定为20*2字节。
相反,我想要这样的东西:
typedef union
uint16_t reg;
uint8_t low;
uint8_t high;
}Registers;
typedef struct{
uint8_t updateIntervall;
uint8_t prio;
Registers *regs; // <--- Array of unions
}Config;
uint8_t amount = 4;
Config cfg;
cfg.regs = malloc((amount * 2) * sizeof(uint8_t));
我猜
Config cfg;
已经初始化结构,所以这不应该工作。
我猜我的做法完全错误,所以如果有人能指出正确的方向,我将不胜感激。
我会用另一种方式来做。 nregs
是数组的大小
typedef struct{
uint8_t updateIntervall;
uint8_t prio;
Registers regs[]; // <--- Array of unions
}Config;
Config *cfg=malloc(sizeof(*cfg) + nregs * sizeof(cfg->regs[0]));
我不确定我是否正在接近这个正确的方法,但我想做的是为结构内的联合数组动态分配内存,我可以使用
Registers regs[20];
但我不想固定为20*2字节。 相反,我想要这样的东西:
typedef union
uint16_t reg;
uint8_t low;
uint8_t high;
}Registers;
typedef struct{
uint8_t updateIntervall;
uint8_t prio;
Registers *regs; // <--- Array of unions
}Config;
uint8_t amount = 4;
Config cfg;
cfg.regs = malloc((amount * 2) * sizeof(uint8_t));
我猜
Config cfg;
已经初始化结构,所以这不应该工作。
我猜我的做法完全错误,所以如果有人能指出正确的方向,我将不胜感激。
我会用另一种方式来做。 nregs
是数组的大小
typedef struct{
uint8_t updateIntervall;
uint8_t prio;
Registers regs[]; // <--- Array of unions
}Config;
Config *cfg=malloc(sizeof(*cfg) + nregs * sizeof(cfg->regs[0]));