范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C语言返回指向栈内存的指针?

  预备知识:内存的分类
  C/C++程序占用的内存分为两大类: 静态存储区 与动态存储区 。其示意图如下所示:
  数据保存在静态存储区与动态存储区的区别就是:静态存储区在 编译-链接 阶段已经确定了,程序运行过程中不会变化,只有当程序退出的时候,静态存储区的内存才会被系统回收。动态存储区是在程序运行过程中动态分配的。
  在其它地方我们还可以看到内存分配还有其他分类,那些都是细分的分类,比如文字常量区、全局数据区等,都归为静态存储区这一个大类。
  关于内存的分类这里只是大致说明一下,关于内存更详细的内容可查看往期笔记:
  【C语言笔记】内存笔记 例子:return返回指向栈内存指针
  先看一个return返回指向栈内存指针的例子: #include   char *GetStr(void) {     char p[] = "Hello"; /* 保存在栈中 */     return p; }  int main(void)  {     char *str = NULL;     str = GetStr();     printf("%s ", str);     return 0; }
  程序编译、运行的结果如下:
  可以看到,编译出现警告:
  warning: function returns address of local variable
  运行结果并不是我们期望的输出字符串 Hello 。
  那是因为 GetStr 函数返回指向栈内存的指针,这里的变量p是局部变量,而局部变量是分配在栈上的。即Hello 保存在栈内存上,栈内存在函数调用结束时会自动销毁,因此此时的p里的内容是未知的,所以结果无输出。
  下面我们把 GetStr 函数修改为:char *GetStr(void) {     char *p = "Hello";  /* p在栈上,Hello在静态区(常量区) */     return p; }
  此时编译运行的结果是怎样的呢?结果为:
  可以看到能正常输出。为什么这里又可以正常输出呢?因为这里的p虽然分配在栈上,但是此时的 Hello 是一个字符串常量,其存储在静态存储区。在调用GetStr 函数结束时其也不会被销毁。
  这里可能有些人会有疑惑,同样是 Hello ,为什么一个在栈上,一个在静态区。char *p = "Hello";
  此处首先定义了一个指针变量p,编译器就会为指针变量开辟了栈空间。而此时并没有空间来存放 Hello ,所以Hello 只能存储在静态区。char p[] = "Hello";
  此处首先定义一个数组p,因为未给出数组大小,所以此时数组大小未确定。然后把 Hello 保存在这个数组里,编译器就会为数组p开闭适当的栈空间来存储Hello 。
  相关笔记:【C语言笔记】char *str与char str[]的区别 其它替代方法
  从上面的例子我们知道,若函数返回指向栈内存的指针,所得到的结果并不是我们想要的。除了上面的方法之外,这里还有如下几种解决方法:
  1、把p定义为全局变量,因为全局变量存储在静态存储区,程序结束才会释放。但是这样会导致函数是不可重入的。关于函数的重入与不可重入可查看往期笔记。
  2、在 GetStr 函数中使用malloc 申请动态内存,但使用完一定要记得使用free 进行释放,否则会导致内存泄漏。示例代码如下:// 微信公众号:嵌入式大杂烩 #include  #include  #include   char *GetStr(void) {     char *p = (char*)malloc(64*sizeof(char));     strcpy(p, "Hello");     return p; }  int main(void)  {     char *str = NULL;     str = GetStr();     printf("%s ", str);     free(str);  /* 释放str指向的堆内存 */     return 0; }
  3、可以将变量p声明为static静态变量。但这也会导致函数是不可重入的。示例代码如下: // 微信公众号:嵌入式大杂烩 char *GetStr(void) {     static char p[] = "Hello";     return p; }猜你喜欢:
  分享一些C语言的经典demo
  分享一个有趣的库,让你学习C语言不会觉得那么枯燥
  长文 | 花了两天时间整理了STM32中的一些C语言知识点
  1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复1024,即可免费获取!

荣耀20基本参数被确认,价格挺感人。这才是荣耀的作风。随着不断的增加资金投入和华为的大力扶持,现在的荣耀正处于高速发展的道路上,不惜将一些上市不久的机型降价清仓之外,也积极的布局新机。根据外媒的消息称,荣耀打算在四月中旬发布荣耀20系苹果官网疯狂暗示iPhoneSE2或3月25日亮相iPhoneSE2的相关传闻已经看了一年多,现在终于有准信了,这次的爆料者,是苹果自己。距离3月25日苹果春季发布会越来越近,苹果官网这几天也每日上架12款新品。有网友发现苹果官网华为P30超清曝光,拍照实力恐怖华为P30和P30Pro定于3月26日在巴黎发布,两款新机的预售也将于3月27日0点开启,如今还有不到一周的时间。作为国产大品牌的的旗舰机,越临近发布日期受到的关注就越多。网上关于小孩儿玩的东西都要嵌入式了?ArmLinuxArduino板ampx3D现代版游戏机据外媒报道,去年在Kickstarter众筹了近30万美元制造了一台复古游戏机,并于去年夏天开始陆续向支持者发货。收到货物的作者进行了开箱和测评。ClockworkPiGamesh大湾区信息通信业重大利好!光纤网络首次实现粤港澳互通3月22日上午,在粤港澳大湾区信息通信服务合作发布会上,南方记者了解到,中国联通,香港电讯澳门电讯三者合作,构建粤港澳大湾区精品网,率先实现粤港澳光纤固网互联互通。中国联通国际有限数据被曝!诺基亚手机向中国发送用户信息3月22日,据外媒Phonearena报道,NRK(挪威广播公司)指出,有部分诺基亚智能手机一直在向中国发送未加密的用户信息。对此,HMD公司正在接受芬兰数据保护监管机构的调查。据半导体设备厂商最新排名蕴含着哪些信息?半导体行业观察来源本文由公众号半导体行业观察(IDicbank)张健原创。本周,美国半导体产业调查公司VLSIResearch发布了2018年全球半导体生产设备厂商的营收排名,主要列出了排在前1数字藏品非噱头,需理性审视一段时间以来数字藏品火了,什么是数字藏品?简单地说就是把你的照片声音文字视频放到区块链上去,变成具有唯一性不可分割和稀有性数字作品,花了8万的玩家,玩到了啥?让人掏出真金白银的不止Q1新能源车销量亮眼但机构提示4月排产平淡中下游博弈或加剧科创板日报(上海,编辑宋子乔)讯,今日(4月11日),乘联会披露了3月份新能源乘用车的销量数据零售销量同比增长137。6达44。5万辆,环比增长63。1,均好于历年3月走势。另外,centos系统samba配置自己去安装,省略。yumyinstallsambasambaclientcdetcsambacpsmb。confsmb。conf。bakrootwwwv2sambavimsmb。c不出意外,油价可能要大降了近两年新能源汽车销量猛增,根据数据显示,2021年我国新能源汽车销量就超过了300万辆,预计未来几年的年销售可能会超过500万辆,而作为新能源汽车的龙头企业,特斯拉创始人马斯克也靠
苹果据称启动雄心勃勃的突围计划将把广泛的金融服务内部化知情人士透露,苹果公司正在为未来的金融产品开发自己的支付处理技术和基础设施,作为其雄心壮志的一部分,意在未来减少对外部合作伙伴的依赖。知情人士称,苹果一项为期多年的计划将把广泛的金微信打击数字藏品交易,大批公众号被封禁29日,微信客户端中多家与数字藏品相关的公众号突然被封禁,涉及的平台超十个,均为中小型数字藏品平台,腾讯幻核等头部平台未受影响。大部分平台皆被提示为由用户投诉并经平台审核,存在未取小鹏汽车2021年财报量的差距已拉开,利的步伐或在加快2021年是非常特殊也是充满挑战的一年,不止是对于经济金融市场,对于车市同样如此。在经历疫情之后,底层逻辑及格局都在发生着深刻变革,新能源成为去年二级市场的宠儿,其中新势力也成为不教育部国家高等教育智慧平台首批上线2万门课程在3月29日召开的教育部新闻发布会上,教育部高等教育司司长吴岩介绍了国家高等教育智慧教育平台建设和应用的有关情况。他提到,高等教育智慧教育平台是全球课程规模最大门类最全的国家高等教京东兄弟终究还是变成混日子的员工,巨头迎来50的部门裁员率一个京东员工只是在网络上,说了一句狗东,就以莫须有的理由给开除了。这位被开除的员工倍感委屈,平时大家都这么叫,现在却拿这句话做文章。当年号称永远不会开除任何一个兄弟的京东,终于迎来8款超良心的电脑软件,一个比一个好用,建议收藏好用的电脑软件有那么多,今天给大家分享8款超良心的电脑软件,使用后舒适感立马提升,一起来看看吧!1。ScreenToGIF这是一款GIF动画录制软件,可以用来快速录制屏幕上的指定区程序员如何摆脱无效内卷,用它!飞算SoFlu软件机器人内卷本来是一个专业词汇,指一种社会或文化模式发展到一定程度后所表现出的停滞状态,既没有办法趋于稳定,又没有办法升级发展为新的阶段,只能在内部不断进行消耗。现如今,内卷一词已出圈到各5年30倍增长,这个涉及隐私的行业开始卷了?如果单从融资事件来看,2022年隐私计算赛道依然在延续着去年的火热。2月9日,由多位前阿里员工创立的隐私计算企业蓝象智联宣布完成近2亿元A轮融资2月28日消息显示,蚂蚁科技入股隐私油价飙升,换台充电的?其实新能源车也在涨!涨!涨自3月14日起,汽柴油价格持续上涨,95号汽油已经突破了9元大关,加满一箱油要比原来多几十元。这样的情况下,新能源车又被频繁提起。近年来,新能源车快速发展,续航里程和充电速度都得到Quantinuum宣布更新QNLP工具包ambeq更新推出了许多新的重要功能,为研究人员和开发人员在将句子转换为量子电路方面提供更多的选项和灵活性英国牛津2022年3月30日美通社全球领先的集成量子计算公司Quantin98寸电视机普通人家能买的起吗?98寸电视贵不贵得看你选那个品牌的产品了,比如TCL98Q6E,近百寸的巨幕,拥有安桥音响,MEMC防抖技术,HDMI2。1接口以及WiFi6的网络配置,2万元的价格,忒实惠了。部