利用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;
}
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
首页/
已采纳
C语言malloc内存分配的问题
收起
- 写回答
- 好问题 1 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
凌夜望天涯 2017-02-14 23:56关注首先我觉得你的返回值和函数锁定的返回值类型就不一致,定义的是返回结构体,实际上返回的是结构体指针;其次对于你的问题,malloc锁所申请的内存空间是堆空间,这部分的内存是需要程序员手动申请并且手动释放,否则没有默认的内存回收机制,就会导致内存泄漏,这个不用于直接定义变量所申请来的栈内存。所以你返回了malloc出来的内存地址head,那在主调函数中当然可以得到并访问这片空间。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2021-11-25 03:40回答 2 已采纳 你分配出来的空间是用来保存字符串吗?如果保存字符串的话, C语言的字符串中,最后会保留一个截止符号('\0')的。你申请字符串的内存空间时,要字符串的长度加1 ,那个1就是为了保存'\0'的。保存了截
- 2020-08-03 10:49回答 2 已采纳 既然是C++,你可以用new函数,没有那么繁琐。p->front = p->rear = new listqueue.我做了一些复习资料,你可以康康
- 2021-09-07 08:45回答 3 已采纳 有帮助望采纳 #include <stdio.h> // #include <math.h> #include <memory.h> int main() {
- 2024-08-09 02:08路溪非溪的博客 我们可以返回由malloc申请出来的局部变量的指针),其实就是因为堆内存的特点,只要指向堆内存的指针不丢失,就能被访问被操作,比如A函数调用B函数,然后B函数里malloc了一块堆内存,可以返回堆内存的指针给B函数,...
- 2021-11-08 04:36回答 2 已采纳 每行的p的地址都是首地址,每次malloc后,由系统重新分配内存,所以p也会随着改变,直到没有内存可以分配(程序会崩溃)。没有free的空间还保留在程序中,但是因为已经让p指向了新申请的内存,所以先申
- 2022-03-05 23:14回答 1 已采纳 参数用二级指针
- 2014-12-29 05:25回答 3 已采纳 void指针是什么? void指针一般被称为通用指针或泛指针,它是C关于“纯粹地址(raw address)”的一种约定。void指针指向某个对象,但该对象不属于任何类型。请看下例: i
- 2021-01-19 14:46引言:对于指针,正确的分配动态内存是十分重要的,本文将着重阐述动态内存分配函数malloc,calloc,realloc以及memset的用法。 一、对于malloc,在终端输入 #:man malloc可以知道函数原型是: Void *calloc...
- 2022-04-26 09:33回答 1 已采纳 两个问题 判断相等写成了单个=初始化方式错了 这里判断相等写错了main函数中初始化方式错了对应的访问方式也需要更改,->用于结构体指针,.用于结构体变量所有函数里面的Q都需要改成&Q修改完毕后
- 2022-04-10 11:38回答 1 已采纳 malloc(len)申请的是内存地址,通俗地说,就是指针的模板,然后(char*)malloc(len)则是把这个模板转换成char*类型指针char的话,不是地址不能这样子转换如果对你有帮助,望采
- 2016-03-06 01:36回答 3 已采纳 内存分配失败就会返回空指针
- 2020-09-03 02:32本篇文章将深入探讨C语言中的内存分配问题,特别是关注内存泄漏以及如何使用malloc和指针来管理内存。 首先,C语言中的内存分为几个不同的区域: 1. **程序代码区**:存储函数体的二进制代码。 2. **全局数据区**...
- 2024-12-29 07:49幼稚诠释青春的博客 4. free()动态内存分配是C语言中一个强大的特性,能够在运行时灵活地分配和管理内存。
- 2024-10-11 13:58cPlayerOnline的博客 快速了解malloc,calloc,realloc的使用方式,同时也是我的学习笔记
- 2024-02-17 02:12malloc
- 没有解决我的问题, 去提问
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司