我很难理解这个概念:我有一个固定大小的定义:
(来自 http://msdn.microsoft.com/pt-br/library/aa931918.aspx)
typedef struct _FlashRegion {
REGION_TYPE regionType;
DWORD dwStartPhysBlock;
DWORD dwNumPhysBlocks;
DWORD dwNumLogicalBlocks;
DWORD dwSectorsPerBlock;
DWORD dwBytesPerBlock;
DWORD dwCompactBlocks;
} FlashRegion, *PFlashRegion;
这个 FlashRegion 结构,在这个另一个结构中使用: (来自:http://msdn.microsoft.com/pt-br/library/aa932688.aspx)
typedef struct _FlashInfoEx {
DWORD cbSize;
FLASH_TYPEflashType;
DWORD dwNumBlocks;
WORD dwDataBytesPerSector;
DWORD dwNumRegions;
FlashRegion region[1];
} FlashInfoEx, *PFlashInfoEx;
问题是,我可以在 FlashInfoEx 中拥有可变数量的 FlashRegions。我调试的函数在代码的某处执行此操作:
memcpy (pFlashInfoEx->region, g_pStorageDesc->pRegionTable,
g_pStorageDesc->dwNumRegions * sizeof(FlashRegion));
这意味着它将一定数量的区域复制到 pFlashInfoEx(我在函数调用中传递的);
因此,如果 dwNumRegions 大于 1,代码将覆盖内存。如果是这样,我是否应该在我的代码中创建一个 FlashRegion [FIXED_SIZE] 并以某种方式在 FlashInfoEx->region 中放置/覆盖?我该怎么做?
谢谢, 马塞洛
最佳答案
这个概念是虽然 FlashRegion 看起来像一个固定大小的结构,但它实际上是动态调整大小的。魔术是在分配结构时完成的——不是调用 (FlashRegion*)malloc(sizeof(FlashInfoEx))
或 new FlashRegion
,而是调用类似 (FlashRegion *)malloc(sizeof(FlashInfoEx)+sizeof(FlashRegion)*(numRegions-1))
关于c++ - C中结构内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395395/