关于如何使用变长结构体

不羁的野马 2017-10-12 11:53:04
请问这种多层嵌套的变长结构体,怎样申请内存会比较合理呢,我遇到一个问题就是,A结构体的a_val_1[0]和a_val[1]之间的地址差只有sizeof(B)那么大,也就是两个BYTE那么长,从而导致a_val_1[0].b_val_2[0]的c_val_1和c_val_2两个值被a_val_1[1]的b_val_1和b_len覆盖了。(linux开发环境中)
struct C
{
BYTE c_val_1;
BYTE c_val_2;
}
struct B
{
BYTE b_val_1;
BYTE b_len;
struct C b_val_2[0];
}
struct A
{
BYTE a_len;
struct B a_val_1[0];
}


还有遇到一个结构体中存在两个变长变量的时候,怎么处理
struct D
{
BYTE d_len;
BYTE d_val_1[0];
BYTE d_val_2[0];
}
...全文
380 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
架构师李肯 2018-12-27
  • 打赏
  • 举报
回复
你这样嵌套使用0长度数组,属于“滥用0长度数组”的行为;因为0长度数组实际是不分配内存,只是起到一个占位的作用,比如 struct A的a_val_1可以理解成strcut B *p_a_val_1;

而这个p_a_val_1空间编译器不会给你分配,需要应用程序自己通过malloc等动态分配内存手段来分配,使用完之后立即释放掉;

这里就暴露它的一个重要缺点 :在结构体中,数组为0的数组必须在最后声明,使 用上有一定限制。

回到楼主的问题:像楼主这样嵌套叠加使用,是达不到想要的结果的。
记住一点: 0长度数组其实就是灵活的运用的数组指向的是其后面的连续的内存空间。
zhgwbzhd 2018-12-27
  • 打赏
  • 举报
回复
多个结构嵌套,没问题的。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧