函数返回栈地址空间

思考:此程序会输出 hello world 吗? 

 在VS2019下测试的结果如下:

为什么呢?下面来解释一下原因:

首先,来了解一下C语言中内存区域划分的常识

 

 

从而,我们得知,函数的局部变量存放在栈区,它的生命周期仅限制在函数域内,即函数执行时被创建,函数结束后被销毁。

分析题目:

1. 指针p是函数的局部变量,存放的是一个字符数组的首元素h的地址,在GetMemory()函数结束时返回该地址,保存在str指针变量中。
2. 然而,在GetMemory()函数结束后,它内部的局部变量会销毁,包括字符数组,将其占用的内存空间释放,归还给操作系统。
3. 所以,函数结束后,str内部记录的地址已不再是曾经的数组首元素地址,此时str指向一个未知的空间,成为野指针
在printf()时,也不能通过str如愿找到整个字符数组打印出来。 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值