免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bxb_koala
打印 上一主题 下一主题

为什么函数返回,局部变量没有释放? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-10-29 14:47 |只看该作者
那个字符串是在堆上的,常量字符串,肯定不会出错的。
你可以去看str的只就知道了。不是栈的地址,是堆上的!

论坛徽章:
0
22 [报告]
发表于 2009-10-29 14:57 |只看该作者

回复 #21 ameihualudeai1 的帖子

难道除了new和malloc,大哥你还有第三种方式来在堆上非配内存?

看来我落伍了。。。

论坛徽章:
0
23 [报告]
发表于 2009-10-29 15:51 |只看该作者
原帖由 langue 于 2009-10-26 17:22 发表
我求你们了,不要学 C 了,用托管内存吧……

同意

论坛徽章:
0
24 [报告]
发表于 2009-10-30 16:59 |只看该作者
const区,哎不解释了,
自己好好学去吧!

论坛徽章:
0
25 [报告]
发表于 2009-10-30 17:00 |只看该作者
原帖由 youshuang 于 2009-10-29 14:57 发表
难道除了new和malloc,大哥你还有第三种方式来在堆上非配内存?

看来我落伍了。。。

自己去学习吧,自己去看地址去吧。
这个字符串是不能修改的,在堆上。
是预处理完成的!
自己看看地址再说吧!

论坛徽章:
0
26 [报告]
发表于 2009-10-30 18:05 |只看该作者
栈上的变量不一定就清0 了,函数退出后只是得到了新的栈顶,至于刚刚从栈里出来,里面的数据是否还在这取决与编译器实现。

论坛徽章:
3
金牛座
日期:2013-10-12 15:42:452015年辞旧岁徽章
日期:2015-03-03 16:54:15IT运维版块每日发帖之星
日期:2016-06-01 06:20:00
27 [报告]
发表于 2009-10-31 09:20 |只看该作者
原帖由 langue 于 2009-10-26 17:22 发表
我求你们了,不要学 C 了,用托管内存吧……

不必生气,对有的学生就要不言之教,自悟。

论坛徽章:
0
28 [报告]
发表于 2009-10-31 15:34 |只看该作者
郁闷,本来沙发和板凳已经把问题说的很明白了,居然还有人不看贴就回帖了,自己胡扯一气。
所以通过这件事证明了一个问题,偶的C学得已经够烂了,可是居然有人比偶的C还烂

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
29 [报告]
发表于 2009-11-02 09:09 |只看该作者
汗一个 。。。

论坛徽章:
0
30 [报告]
发表于 2012-04-15 03:45 |只看该作者
本帖最后由 huangzhenfan 于 2012-04-15 17:44 编辑

回复 1# bxb_koala


   
    在get_str 函数中 char* str = "abcd"; "abcd"是字符串常量,它在静态存储区域中占5个字节,即加上最后一位'\0',它的存储单元不会被清零.而指针变量str实际并不是存放字符串"abcd"的,它仅用来存放静态存储区中"abcd"的首字符a的地址;因为get_str函数返回值是指针变量str

所以在main函数中,可以直接这样写 printf ("%s",get_str());


如果是谭浩强的C书籍入门的,谭导师的葵花宝典和他的天书,一定会祝你成为man
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP