大一复习局部变量遇到问题

img


b是局部变量,为什么控制回到主函数后,任然能够输出b的值。我把调用函数中b的地址给p,将p返回主函数,返回主函数后b的值不应该消失吗,那p所指向的位置不应该就没有值了吗

没有说一定不行,只是不能确保能行。
因为局部变量当函数运行结束后,变量空间会被系统回收。在这个空间没有被分配给其它对象时,这个空间的数据还是在的,你输出就没问题。一旦被分配给其它对象,并进行数据修改,就不一定是你想的值了

你返回的是一个指针,它指向位置的是一个局部变量。这个局部变量的生命周期结束后系统会将这块内存标记为空闲内存,并不是真的修改了这块内存,所以在系统下一次覆盖这块内存之前,其中储存的数据不会改变。
但是这种访问是十分危险的,因为你不知道系统什么时候就会使用这块内存,随意访问容易造成内存泄漏。

你知道c语言是基于指针的吧
很多时候数组都越界了还能读出值来就是这个原因
局部变量b生命周期已过,系统会将它标记为可回收,此时p其实就变成了野指针,指向一个不确定是什么值,甚至不确定是不是你程序申请的内存,但是很多时候依然能够读到值