C语言 Malloc 表示字符数组和结构




在这个问题中,详细解释了malloc在字符数组中的用法。
我什么时候应该在 C 中使用 malloc,什么时候不应该?


对于 C 中的结构也是如此吗?
例如,考虑以下定义:

struct node 
{ 
  int x;
  struct node * link;
}
typedef struct node * NODE;

考虑上述结构的以下两种用法:

1)

NODE temp = (NODE) malloc(sizeof(struct node));
temp->x =5;
temp->link = NULL;

2)

struct node node1, *temp;
node1.x = 5;
node1.link = NULL;
temp = &node1;

我是否可以使用第二个示例中的temp声明,并使用 temp->link = &node2(指向 node2 结构的指针)将node1.link点修改为另一个结构struct node node2?在这里,此实现用于创建树数据结构。

这些结构是否也遵循与上述链接中所述的数组相同的规则?因为我看到的许多实现都是在第一次使用之后。使用 malloc有什么具体原因吗?

您可以执行 #2 中描述的操作,但请记住,只要node1在范围内,它就会起作用。如果node1是函数中的局部变量,那么当函数返回时,它引用的内存位置将被回收并用于其他内容。程序中仍指向&node1的任何其他指针将不再有效。使用 malloc 动态分配内存的优点之一是,在您调用 free 显式释放内存之前,它一直有效。

第一次使用堆内存,它几乎和你的物理内存一样大,但第二次使用堆栈momory,这很吓人(通常为8M)

是的。你可以执行"temp->link = &node2;",因为temp指向node1。

是的,这个规则在 C 中非常通用,所以它可以适用于数组。

使用 malloc 时,空间分配在堆中而不是堆栈中。这允许您为大型数据结构分配更多空间。缺点是你还需要在使用后"释放"内存。否则,将发生内存泄漏。

如果动态分配内存,则必须通过调用 free() 以编程方式释放该内存。

首先,您动态分配内存,它将从堆中分配内存。如果您将数据存储在内存heap它将一直保留到您调用free否则它将在程序终止时释放内存。

第二个将值存储在stack其作用域是函数的本地

您的示例似乎正在处理链表,因此您可能随时需要添加或删除节点,因此使用动态分配是最佳选择。

最新更新