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

标签 c multidimensional-array heap-memory 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));

提前致谢!

最佳答案

第二个例子是正确的。

您想要创建规则的一维数组。因此,您分配 alloc_size*sizeof(Rules) 字节的空间。因为您的函数(大概)传递了指针的地址(即 Rules **),所以您希望将分配的内存分配给取消引用的指针,即 *rules_array。然后,当函数返回时,您就可以访问该内存。

唯一需要改变的是摆脱 Actor 阵容。转换 malloc 的返回值可以掩盖代码中的其他错误。请参阅Do I cast the result of malloc?了解更多详情。

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

关于c - 结构数组的内存分配? 2个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155610/

相关文章:

c - 如何创建带有设置变量的大型二维数组?

java - 将二维数组作为一个整体进行排序

java.lang.内存不足错误: java heap space problem

java - 使用 JNI 从 C 调用 java 代码时发生内存泄漏

c - 链表还是哈希表?

python - 多维数组到多维元组

java - Tomcat 。动态扩展堆内存

c - 跳过 scanf getchar 函数

C - 如何在 linux 中使用 API 库

java - 如何在 MAT Eclipse 中的 OQL 中使用 "AND operator (&&)"