c++ - C中结构内的数组

标签 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;

这个 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/

相关文章:

ios - Swift 类之外的变量和常量的内存分配

c++ - 我应该多认真对待 Valgrind 和小内存泄漏(比方说 < 100 字节)?

c++ - Boost单元测试链接错误--abi不匹配?

c++ - E2316 'any_of' 不是 'std' 的成员

c++ - 与 int 乘 int 相比,为什么执行浮点乘浮点矩阵乘法更快?

php - 如何在 PHP 中查找对象使用的内存? (大小)

c++ - 位域和字节顺序

c++ - 自 Visual Studio 15.6.2 编译器更新标准以来,新的 C++17 [[nodiscard]] 警告是否符合标准?

c++ - 即使有足够的空间,OpenCV 也拒绝分配内存

c - 连接字符串后的 Malloc() 内存损坏错误