免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3073 | 回复: 11

[C] C函数不能返回指向自动变量的指针, 对贴子里的例子有疑问 [复制链接]

论坛徽章:
0
发表于 2016-01-18 15:36 |显示全部楼层
本帖最后由 BangBull 于 2016-01-18 15:37 编辑

#include <stdio.h>

int * a(){
        int * num ;
        int n = 10 ;
        num = &n ;
        return num ;
}

int main() {
        int * n  ;
        n = a() ;
        printf("%d \n", *n) ;

        return 0 ;
}



不是说C函数不能返回指向自动变量的指针吗,

在函数 a() 返回后,局部变量n的内存已经释放了 ,

这个例子怎么可以正常run呢 ?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2016-01-18 15:42 |显示全部楼层
有人做了犯法的事情,也依然逍遥法外,但说不定哪天就进去了。

评分

参与人数 1可用积分 +8 收起 理由
MMMIX + 8 赞一个!

查看全部评分

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2016-01-18 15:46 |显示全部楼层
回复 1# BangBull


    谁告诉你内存释放了?你在执行func a()之后,再执行个杂七杂八的函数,里面申请一堆变量,然后写写画画,不需要返回。你再看看是什么结果?

论坛徽章:
0
发表于 2016-01-18 15:55 |显示全部楼层
  1. #include <stdio.h>

  2. int * a(){
  3.         int * num ;
  4.         int n = 10 ;
  5.         num = &n ;

  6.         return num ;
  7. }

  8. void bad(){
  9.         char * bad_chars = "abcedb" ;
  10.         static bad_num = 101 ;
  11.         printf("%s %d\n",bad_chars,bad_num) ;
  12. }

  13. int main() {
  14.         int * n  ;

  15.         n = a() ;

  16.         bad();
  17.         printf("%d \n", *n) ;

  18.         return 0 ;
  19. }
复制代码
  多谢两位!   
C函数不能返回指向自动变量的指针 , 这句话是对的!

论坛徽章:
0
发表于 2016-01-18 15:59 |显示全部楼层
回复 3# lxyscls


    a() 执行完后  ,  自动变量 n 不是应该被释放了么?

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
发表于 2016-01-18 16:45 |显示全部楼层
看标记可使用的n变量的内存是否被再次分配出去吧。没分配就还是原来的值。

论坛徽章:
0
发表于 2016-01-18 16:55 |显示全部楼层
回复 6# seanking1987


    跑了例子, 是这样的

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2016-01-18 17:13 |显示全部楼层
回复 5# BangBull


    没有所谓“释放”,栈本来就是重复使用的,上面是什么还是什么,除非下次有人再用这片内存。bad()函数就是再用了这边内存,把里面的内容洗白白了

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2016-01-18 17:25 |显示全部楼层

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
发表于 2016-01-20 12:54 |显示全部楼层
lxyscls 发表于 2016-01-18 17:13
回复 5# BangBull
没有所谓“释放”,栈本来就是重复使用的,上面是什么还是什么,除非下次有人再用这片内存。bad()函数就是再用了这边内存,把里面的内容洗白白了

多谢
多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP