gpt4 book ai didi

c++ - 制作可变大小结构的方法

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:58 25 4
gpt4 key购买 nike

我需要制作一个包含 header 、尾部和可变长度负载字段的数据包。到目前为止,我一直在为有效负载使用 vector ,所以我的结构是这样设置的:

struct a_struct{
hdr a_hdr;
vector<unsigned int> a_vector;
tr a_tr;
};

当我尝试访问 vector 的成员时出现段错误,并且整个结构的 sizeof 给我 32(在我向 vector 添加了大约 100 个元素之后。

这是一个好方法吗?什么更好?

我找到了这篇文章 Variable Sized Struct C++他使用的是字符数组,而我使用的是 vector 。

最佳答案

即使 vector 类型内联在结构中, vector 中的唯一成员可能是指针。向 vector 添加成员不会增加 vector 类型本身的大小,但会增加它指向的内存。这就是为什么你永远不会看到内存中结构的大小增加,因此你会遇到段错误。

通常当人们想要制作一个可变大小的结构时,他们通过添加一个数组作为结构的最后一个成员并将其长度设置为 1 来实现。然后他们将为 sizeof 实际需要的结构分配额外的内存() 以“扩展”结构。这几乎总是伴随着结构中的一个额外成员,详细说明扩展数组的大小。

使用 1 的原因在 Raymond 的博客上有完整的记录

关于c++ - 制作可变大小结构的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com