结构体字节对齐

文章讲述了项目中遇到的运行时错误,涉及到结构体内存对齐问题。作者分析了`demo_list_t`和`demo_t`结构,发现`data`字段未按4字节对齐导致错误。通过调整`demo_list_t`结构使其4字节对齐,解决了问题。
摘要由CSDN通过智能技术生成

1.问题现象

项目中代码执行过程中报错,大致报错是runtime error member access within misaligned address which requires 4 byte alignment

2.问题定位

typedef struct {
    unit16_t count;
    uint8_t data[0]; // store demo_t list
} demo_list_t;

typedef struct {
    uint32_t tpye;
    bool flag;
    uint32_t value;
} demo_t;

demo_list_t demo_list;
demo_t* demo_list = (demo_t*)demo_list.data;

定位出问题的代码大致如上,代码需求是将demo_t的结构体数组存到demo_list_t的data字段中,起初怀疑是demo_t结构体没有字节对齐,遂修改之,依然报错;重新审视代码,发现demo_list_t结构体的data字段没有按4字节对齐

3.问题解决

typedef struct {
    unit16_t count;
    uint16_t reserved;
    uint8_t data[0]; // store demo_t list
} demo_list_t;

将demo_list_t进行4字节对齐,问题解决,记录之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值