结构数组的内存分配? 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 ***
并在分配给它之前取消引用它。
我遇到以下情况,传递给函数的结构数组。所以,在函数内部我正在处理双指针。现在我很困惑,它正在工作,但我不确定为什么它会以两种方式工作(我喜欢以不同的方式尝试,这样我会更好地理解它)。
数组作为参数接收为: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 ***
并在分配给它之前取消引用它。