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

时间:2016-02-02 14:05:12

标签: c multidimensional-array heap dynamic-arrays double-pointer

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

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

示例1:

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

通过在示例1中执行,我希望再制作一个循环来为所有这些将从Rules *元素指向的结构(数组元素)分配内存,但显然它不是必需的,这就是我所不知道的不明白。

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

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

第二个例子是正确的。

您想要创建Rules的1维数组。所以你为alloc_size*sizeof(Rules)字节分配空间。因为您的函数(可能)传递了指针的地址(即Rules **),所以您希望将分配的内存分配给解除引用的指针,即*rules_array。然后当函数返回时,您可以访问该内存。

唯一需要改变的是摆脱演员阵容。转换malloc的返回值可能会掩盖代码中的其他错误。有关详细信息,请参阅Do I cast the result of malloc?

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