局部数组变量生命期结束的那些事

      局部数组变量的内存是在函数栈中分配的,函数栈是一级一级的,每进入一个嵌套函数就在栈内存的低地址处为新函数开辟一个栈帧,函数返回后取消这个栈帧,栈帧指示寄存器ESP重新指回当前函数的栈帧,这样刚才那个栈帧中的内存是不应使用的,但是其中的数据还在,通过指针依然可以使用。但是当程序再进入一个嵌套函数时,就会继续在刚才取消栈帧的内存处开辟新栈帧并存储数据,这样就会把原有的数据覆盖。所以读取退出的函数栈中的数据虽然可以,但是不安全,不应这样做。
     也就是说空间虽然回收给系统了,但是并没有被其他程序使用时,里面的数据就没有被覆盖。
系统不会负责给你清理数据的。
1、指针销毁了,不一定它多指向的空间也销毁了(也就是说上面的指针变量销毁了,它所指向的空间还是在的。上面返回的就是那段空间。)
2、指针所指向的空间销毁了,不一定指针也跟着销毁了(一般如果我们为指针申请了的动态空间的话,用完之后需要释放,free(p); 这时候我们释放的只是指针指向的空间,而它本身还是存在的。)
在非main函数 返回后,它里面的局部变量都销毁了,但是那部分空间只是没有了名字,空间里的内容还在,返回值是指针类型,是将那部分空间的地址返回。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值