gpt4 book ai didi

C 编程 malloc 和 NULL

转载 作者:行者123 更新时间:2023-11-30 19:57:09 26 4
gpt4 key购买 nike

我对 C 编程非常陌生,正在为学校开发一个涉及二叉搜索树的项目。在指令中,它指出我们必须为树中的每个节点调用 malloc。

当我声明头节点时,下面的语句有什么区别吗?如果是这样,哪个是正确的方法?我觉得第一个是正确的方法:

    struct Node* head = NULL; 
head = (struct Node*) malloc(1 * sizeof(struct Node));

    struct Node* head = (struct Node*) malloc(1 * sizeof(struct Node));
head = NULL;

最佳答案

如果您删除第二行(使用 = NULL),版本 B 是版本 A 的更简洁版本,因为这会撤消您在第一行所做的所有工作。

让我们把它分解,从(struct Node*) malloc(1 * sizeof(struct Node)) 开始malloc 调用分配一定量的内存,这是 struct Node 大小的 1 倍。它的开头部分只是说“将其视为指向 struct Node 的指针”;如果没有这个,它只会被视为“指向...某物的指针”(又名 void *)。

一开始你实际上并不需要(struct Node *),因为你分配给它的变量是一个struct Node * 变量,但有些人更喜欢它。我个人不写它,因为它会阻止计算机警告我由于我经常犯的拼写错误而导致的某种类型的错误。

现在来看看版本之间的差异。版本A:

  1. 将指针设置为NULL
  2. 分配一些内存。
  3. 将指针设置为指向该内存。

版本B:

  1. 分配一些内存。
  2. 将指针设置为指向该内存。
  3. 将指针设置为NULL...

您可以明白为什么这会成为一个问题。

  • 您有一个指向NULL的指针,而不是指向可以存储数据的地方;和
  • 您已为程序申请了一些内存,但无法释放它;你的程序内存泄漏。

这很糟糕。我建议使用版本 B,但仅使用其中的第一行;永远不要在没有先释放的情况下将malloc的指针设置为NULL,否则你的程序会慢慢崩溃。

关于C 编程 malloc 和 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com