Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的malloc()函数_C_Malloc - Fatal编程技术网

C语言中的malloc()函数

C语言中的malloc()函数,c,malloc,C,Malloc,有人能解释一下吗 struct node { int data; struct node * link; } main() { struct node *p, *list, *temp; list = p = temp = NULL; ......................... ......................... } addbeg() { int x; temp=malloc(si

有人能解释一下吗

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));


malloc为新节点分配空间

temp->link = list


使新节点成为列表的标题。

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

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

第三行:将当前元素作为列表的开头。

malloc用于分配内存——在本例中,分配给新节点

temp->link = list
代码中定义的addbeg函数执行以下操作:

定义一个临时变量x。 为新节点分配空间。 向scanf输入整数%d代码并将其存储在x中。 将保存到x的值存储在新分配节点的数据字段中。 将变量“list”指向的列表的旧头作为链接存储在新分配的节点中。 将新节点设置为存储在变量“list”中的列表的新头。
这是一个非常基本的整数链表实现。

temp和list在addbeg中不可见,因为它们在main中声明。它们要么需要传递给addbeg,要么需要在主要的global之外声明,恶心

您可以添加一个有用的注意事项,即代码最终应确保每个分配的内存都是免费的,并抱怨“内存泄漏”和“对小型学习程序没有多大影响,但对大型长期运行的程序有影响”,因此,您也可以学习如何在小型学习程序上正确地执行此操作。不过,他的程序无论如何都不会工作,除非将list和temp传递给addbeg,或者addbeg是在main中定义的。在标准C中,addbeg不能在main中定义。有些编译器允许它作为扩展,但它不是有效的C。首先,代码没有完成,也许我们可以将temp和list传递给addbeg,或者我应该在main之外声明temp和list作为全局变量,但是我从一本书中选择了这段代码,因为我不理解它。非常感谢您的回复。
list = temp