我有一个灵活的数组成员,我需要使用一个结构。是否有可能有一个std ::向量的结构与fexible数组成员?
struct Record
{
uint32_t length;
Data contents[];
};
我能够初始化这个和做这样使用它:(它也将使用malloc或任何其他动态分配工作)
vector<Data> members;
vector<uint8_t> buffer;
Record myRecord;
buffer.resize(sizeof(Record) + members.size() * sizeof(Data));
myRecord = *(reinterpret_cast<Record*>(buffer.data());
myRecord.length = static_cast<uint32_t>(members.size());
// copy members to myRecord.contents
这工作得很好。但是现在我需要一个可以批量处理Record的接口,并且我一直在试图使用std :: vector来实现这一点。然后问题开始出现,我猜测这是因为std :: vector在内存中连续排列所有元素,并且由于sizeof(Record)不会考虑内容的大小(每个向量元素只能保存4个字节,而不是4个字节+ size_of_contents * sizeof(Data)),矢量元素实际上是共享内存,然后每个元素开始覆盖前一个元素的内容。那有意义吗?
如果这真的是问题,我想知道是否有任何方法来“强制”向量为每个元素分配一个特定的大小(而不是为元素的类型返回任何sizeof)。这样我可以确保每个向量元素都有足够的大小。如果这是不可能的,是否有其他解决方案?也许是一个不同的容器,可以让我这样做?请记住,我做,因为它的定义需要使用结构(我很想只需更换整个事情的载体,但不幸的是这是不可能的)
您没有提到*开始出现的问题* – rgoliveira
请参阅tag-wiki(http://stackoverflow.com/tags/flexible-array-member/info):该功能是C99 +的一部分,而不是C++。另外,请避免将C++问题混淆为C语言问题。现在,一些gnu ++方言可能会结合这些... – Deduplicator
@rgoliveira我的意思是说数据开始变得不一致。 –