2009-08-01 77 views
-1

任何人都可以请解释一下吗?malloc()函数C

struct node 
{ 
    int data; 
    struct node * link; 
} 
main() 
{ 
    struct node *p, *list, *temp; 
    list = p = temp = NULL; 
    ......................... 
    ......................... 
} 

addbeg() 
{ 
    int x; 
    temp=malloc(sizeof(struct node)); 
    scanf("%d", &x); 
    temp->data=x; 
    temp->link = list; 
    list=temp; 
} 

这是通过C语言在链接列表中输入数据的代码。代码不完整,但我认为它足够的目的。请主要讲解编码这些行:

temp=malloc(sizeof(struct node)); 

temp->link = list; 
list=temp;. 

回答

9

malloc()用于分配内存 - 在这种情况下用于新节点。

在你的代码中定义的函数addbeg()执行以下操作:

  1. 定义一个临时变量x
  2. 为新节点分配空间。
  3. 输入整数(%d代码至scanf)并将其存储在x中。
  4. 将新保存到x的值存储到新分配的节点的数据字段中。
  5. 将变量'list'指向的列表的旧“头部”存储为新分配的节点中的链接。
  6. 将新节点设置为变量'list'中存储的列表的新头部。

这是整数的链表(http://en.wikipedia.org/wiki/Linked_list)的一个非常基本的实现。

+2

你可以有用地添加一个注释,说明代码应该最终确保每个分配的内存使用`free()`释放,嘟about'内存泄漏'和'对于小型学习程序来说并不重要,长期跑步的人“,所以你也可以学习如何在小型学习课程上做到这一点。 – 2009-08-01 16:24:01

+1

虽然他的程序无法正常工作,除非`list`和`temp`被传递给addbeg(),否则addbeg()被定义在main中。 – 2009-08-01 20:09:25

0

的malloc一个新的节点分配空间。

temp->link = list 

list = temp 

使得新的节点列表的头部。

0

第一行:为列表的单个附加节点分配内存。

第二行:附加当前列表作为此元素后面的延续。

第三行:使当前元素成为列表的开始。

0

运算符'sizeof'用于计算数据类型的大小。 运算符计算应在结构节点上分配多少空间。 malloc - 为新结构分配内存。 请记住,如果您使用malloc方法分配内存,则您必须始终使用方法释放此内存使用免费方法。

free(tmp); 

如果您不调用此方法,则会导致内存泄漏。这在C中非常重要。

[操作的sizeof] [1] http://en.wikipedia.org/wiki/Sizeof

0

温度和列表不是addbeg可见的,因为他们在主会宣布。他们或者需要被传递给addbeg或者在main(全局,yuck)之外声明。