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

来源:互联网 发布:软件咨询服务合同书 编辑:程序博客网 时间:2024/06/10 07:48
      局部数组变量的内存是在函数栈中分配的,函数栈是一级一级的,每进入一个嵌套函数就在栈内存的低地址处为新函数开辟一个栈帧,函数返回后取消这个栈帧,栈帧指示寄存器ESP重新指回当前函数的栈帧,这样刚才那个栈帧中的内存是不应使用的,但是其中的数据还在,通过指针依然可以使用。但是当程序再进入一个嵌套函数时,就会继续在刚才取消栈帧的内存处开辟新栈帧并存储数据,这样就会把原有的数据覆盖。所以读取退出的函数栈中的数据虽然可以,但是不安全,不应这样做。
     也就是说空间虽然回收给系统了,但是并没有被其他程序使用时,里面的数据就没有被覆盖。系统不会负责给你清理数据的。
1、指针销毁了,不一定它多指向的空间也销毁了(也就是说上面的指针变量销毁了,它所指向的空间还是在的。上面返回的就是那段空间。)
2、指针所指向的空间销毁了,不一定指针也跟着销毁了(一般如果我们为指针申请了的动态空间的话,用完之后需要释放,free(p); 这时候我们释放的只是指针指向的空间,而它本身还是存在的。)
在非main函数 返回后,它里面的局部变量都销毁了,但是那部分空间只是没有了名字,空间里的内容还在,返回值是指针类型,是将那部分空间的地址返回。
原创粉丝点击