结构数组的内存分配? 2个例子

Memory allocation for array of structures? 2 examples

我遇到以下情况,传递给函数的结构数组。所以,在函数内部我正在处理双指针。现在我很困惑,它正在工作,但我不确定为什么它会以两种方式工作(我喜欢以不同的方式尝试,这样我会更好地理解它)。

数组作为参数接收为:Rules **rules_array

示例 1:

rules_array = (Rules**) malloc(alloc_size*sizeof(Rules*));

通过像示例 1 中那样做,我希望再做一个循环来为所有这些将要从 Rules* 元素指向的结构(数组元素)分配内存,但显然不需要,这就是没看懂。

示例 2(对我来说更有意义):

*rules_array = (Rules*) malloc(alloc_size*sizeof(Rules));

提前致谢!

第二个例子正确。

您想创建一个 Rules 的一维数组。因此,您为 alloc_size*sizeof(Rules) 字节分配了 space。因为您的函数(大概)正在传递指针的地址(即 Rules **),所以您希望将分配的内存分配给取消引用的指针,即 *rules_array。然后当函数 returns 时,你就可以访问那个内存了。

唯一需要改变的是去掉演员表。强制转换 malloc 的 return 值可以掩盖代码中的其他错误。有关详细信息,请参阅 Do I cast the result of malloc?

你对第一个例子的假设是正确的。这是创建二维数组或更准确地说是指针数组的第 1 部分,每个指针都将指向一个数组。在这种情况下,您要么需要 return rules_array 并将其分配给 Rules **,要么传递 Rules ** 的地址以便 rules_array 是一个Rules *** 并在分配给它之前取消引用它。