c - 用于字符数组和结构的 Malloc

标签 c arrays pointers data-structures struct


在这个问题中,详细解释了字符数组的 malloc 用法。
When should I use malloc in C and when don't I?


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 声明,并使用以下命令修改 node1.link 指向另一个结构 struct node node2 temp->link = &node2 (指向node2结构的指针)? 这里,该实现用于创建树形数据结构。

这些结构是否也遵循与上面链接中所述的类似数组相同的规则? 因为我见过的很多实现都是遵循第一种用法的。使用 malloc 有什么具体原因吗?

最佳答案

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

关于c - 用于字符数组和结构的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20897909/

相关文章:

c - 如何使用缩减并行化这个 for 循环?

c++ - 在 C++ 中声明一个 const BYTE *

php - jquery中将json转换为数组

c - 如果不包含 header ,则使用什么 getenv 实现?

c - 将大型 CSV 文件汇总到数组中的内存访问冲突

我们是否可以通过改变 if 条件,在执行完 else 条件后返回执行 if 条件?

c++ - 串行通信 - 我无法将传入的 char 数组转换为 int

c - 整数指针数组的初始化和增量

c++ - 调用指向成员函数的模板指针

c - 如何从函数返回二维字符串数组到C中的主函数? [警告]从不兼容的指针类型返回