我有一個靈活的數組成員,我需要使用一個結構。是否有可能有一個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我的意思是說數據開始變得不一致。 –