C中结构的数组

Mar*_*elo 5 c++ memory-management

我正在努力理解这个概念:我有一个固定的大小定义:

(来自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;
Run Code Online (Sandbox Code Playgroud)

这个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;
Run Code Online (Sandbox Code Playgroud)

问题是,我可以在FlashInfoEx中包含可变数量的FlashRegions.我调试的函数在代码中的某处执行此操作:

 memcpy (pFlashInfoEx->region,  g_pStorageDesc->pRegionTable,
         g_pStorageDesc->dwNumRegions *  sizeof(FlashRegion));
Run Code Online (Sandbox Code Playgroud)

这意味着它将一定数量的区域复制到pFlashInfoEx(我在函数的调用中传递);

因此,如果dwNumRegions大于1,代码将覆盖内存.如果是这种情况,我应该在我的代码中创建一个FlashRegion [FIXED_SIZE],并以某种方式在FlashInfoEx-> region中放置/覆盖?我怎么做?

谢谢,马塞洛

Sum*_*uma 6

这个概念是FlashRegion看起来像一个固定大小的结构,它实际上是动态大小的.在分配结构时完成了魔术 - 而不是调用,(FlashRegion*)malloc(sizeof(FlashInfoEx))或者new FlashRegion你调用类似的东西(FlashRegion*)malloc(sizeof(FlashInfoEx)+sizeof(FlashRegion)*(numRegions-1))