社区
C语言
帖子详情
函数返回时栈中数据会丢失,那么堆中呢?
ai_shui_shou
2012-08-25 08:34:46
malloc的变量可以return中返回码
...全文
177
7
打赏
收藏
函数返回时栈中数据会丢失,那么堆中呢?
malloc的变量可以return中返回码
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pathuang68
2012-08-26
打赏
举报
回复
[Quote=引用楼主 的回复:]
malloc的变量可以return中返回码
[/Quote]
当然可以,而且返回的东东是可以使用的,但是用完后,要记得free掉函数返回的那个东西。
nightkids_008
2012-08-26
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
任何变量都可以return返回的
一般C说的是不要返回栈内存上的数据
比如返回指向栈内存的指针
一旦函数调用结束,栈销毁
这个指针指向的内容也就不可预知了
楼主对于内存的管理还是没有理解透彻
[/Quote]
什么都能返回,就是可不可用的问题。
zxc122333
2012-08-26
打赏
举报
回复
[Quote=引用楼主 的回复:]
malloc的变量可以return中返回码
[/Quote]
可以的,如楼上,要注意释放
更常见的作法是要求在函数外将空间分配好,指针作为参数传入函数
ies_sweet
2012-08-25
打赏
举报
回复
任何变量都可以return返回的
一般C说的是不要返回栈内存上的数据
比如返回指向栈内存的指针
一旦函数调用结束,栈销毁
这个指针指向的内容也就不可预知了
楼主对于内存的管理还是没有理解透彻
Gloveing
2012-08-25
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
堆中申请的内存要手动释放
不然会内存溢出的
[/Quote]
一般是说是:内存泄露
foxpeter
2012-08-25
打赏
举报
回复
堆中申请的内存要手动释放
不然会内存溢出的
AnYidan
2012-08-25
打赏
举报
回复
malloc的变量可以return中返回码
逻辑混乱!
heap 与 程序的 stack 无关,从 heap 中申请的空间必须由程序远自己释放,程序是不会帮你释放的
PHP的堆和栈是干什么的?为什么需要堆和栈?底层原理是什么?
堆使用系统调用动态分配内存,栈则使用操作系统提供的堆栈内存,也就是一段连续的内存区域。当一个
函数
被调用时,其相关
数据
被压入栈,栈指针指向最新的
数据
。当
函数
执行完成并
返回
时,栈指针被移回到上一个
函数
的上下文信息处,上一个
函数
的状态就被恢复了。每当一个
函数
被调用,其相关的
数据
,如参数、局部变量和
返回
地址,都被压入栈
中
。栈的存在可以保证
函数
调用的上下文信息得以独立保存和恢复,从而避免了调用者状态
丢失
的问题。PHP通过内置的垃圾回收机制来管理堆内存,当没有任何变量引用堆内存时,该内存就
会
被自动回收。
函数
调用栈与活动记录
函数
调用栈与活动记录 在调试的时候经常遇到栈溢出,由此总结了下
函数
调用栈的知识。 为了理解C++是如何执行
函数
调用的,先考虑一个称为栈(stack)的
数据
结构。栈是一种后入先出的
数据
结构——压入(插入)栈的最后一项,是从栈
中
弹出(移走)的第一项。
函数
调用栈是“在幕后起作用的”,它支持
函数
调用/
返回
机制。它还支持每个被掉
函数
的自动变量的创建、维护和销毁。 当调用每个
函数
时,它可能调
C语言
中
堆和栈的区别以及不能
返回
指向局部变量的指针
C语言
中
堆和栈的区别 一.引言: 可执行程序在存储时(没有调到内存)分为代码区(text)、
数据
区(data)和未初始化
数据
区(bss)3个部分。 (1)代码区(text segment)。存放CPU执行的机器指令。通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存
中
有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改它的指令。另外...
堆、栈、程序区、静态
数据
区、字符常量区的介绍与区别
自己总结一下关于内存分区的基础知识: 先上图: 在VS测试
中
发现,字符常量区(只读
数据
区)在编译时候与静态
数据
区放在了一起。因此在静态
数据
区的几种类型没有独立的地址区域,都是按照定义的时间顺序进行分配。而动态内存区不同,堆和栈有独立的地址区域,具体介绍可以看下文。 1、 栈区(stack sagment):由编译器自动分配释放,存放
函数
的参数的值,
内存那点事儿之“内存管理”——栈、堆、
数据
段(
数据
区)
问题:内存是暂存
数据
变量的场所,这些内存是如何分配给
数据
的呢?也就是说这些
数据
是如何在内存
中
排布的呢? 首先要明白一个排布的工具:
数据
结构
数据
结构:
数据
结构就是研究
数据
如何组织加工的 常见的
数据
结构有:数组(最简单的
数据
结构)、结构体、栈、堆、队列、链表、哈希表、二叉树………… 数组 数组是管理内存和普通变量本质上没有太大差别 普通变量int a——首先,编译器在内存
中
申请一段内存(4字节),获得该内存的地址(编译器知道地址,我们程序员不知道地址是多少,也没必要知道); 然后将内存分配给a,再将
数据
变量名
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章