C语言malloc内存分配的问题

利用malloc在子函数中分配的内存块为什么会传递回上层函数中?
一下链表为证:
NODE create(int node_size)
{
NODE *head;
NODE *leek;
NODE *znode;
//first node be made
head = (NODE
)malloc(sizeof(NODE));
head->next = NULL;
head->data = 0;
leek = head;
// node_size--;
while(node_size--!=0)
{
znode = (NODE*)malloc(sizeof(NODE));
znode->next = NULL;
printf("input node data:\n");
scanf("%d",&znode->data);
leek->next = znode;
leek = znode;
}
return head;
}

首先我觉得你的返回值和函数锁定的返回值类型就不一致,定义的是返回结构体,实际上返回的是结构体指针;其次对于你的问题,malloc锁所申请的内存空间是堆空间,这部分的内存是需要程序员手动申请并且手动释放,否则没有默认的内存回收机制,就会导致内存泄漏,这个不用于直接定义变量所申请来的栈内存。所以你返回了malloc出来的内存地址head,那在主调函数中当然可以得到并访问这片空间。

什么意思,malloc分配的内存为什么了返回上层函数?
malloc是在堆上分配的内存,你没有去free就一直在,返回一个指针你上层就可以直接用啊

对,malloc分配空间是需要自己清理的,至于为什么能传递,就是指针了,指针这玩意真的很好玩,你让这个指针指向这块内存,无论在多少个函数之外,都能调用到这块内存