dev*_*vin 0 c++ packets data-structures
我需要制作一个包含头部,尾部和可变长度有效载荷字段的数据包.到目前为止,我一直在使用向量作为有效负载,所以我的结构设置如下:
struct a_struct{
hdr a_hdr;
vector<unsigned int> a_vector;
tr a_tr;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试访问向量的成员时,我得到一个seg错误,整个结构的sizeof给我32(在我向向量添加了大约100个元素之后).
这是一个好方法吗?什么是更好的?
我发现这篇文章 变量大小的结构C++ 他使用了一个char数组,但我正在使用一个向量.
尽管向量类型在结构中内联,但向量中唯一的成员可能是指针.向向量添加成员不会增加向量类型本身的大小,而是增加它指向的内存.这就是为什么你永远不会看到结构的大小增加内存,因此你得到一个seg错误.
通常当人们想要创建一个可变大小的结构时,他们通过添加一个数组作为结构的最后一个成员并将其长度设置为1来实现.然后,他们将为sizeof()实际需要的结构分配额外的内存.为了"扩大"结构.这几乎总是伴随着结构中的额外成员,详细说明了扩展数组的大小.
在Raymond的博客中详细记录了使用1的原因