当前位置: 技术问答>linux和unix
堆栈回收问题
来源: 互联网 发布时间:2016-12-03
本文导语: i n t f1(int val) { int *ptr; if (val == 0) { int val; val = 5; ptr = &val; } return (*ptr + 1); } 1 4 0 U N I X环境高级编程 大家分析下这个题目 输出 6 是否说明栈空间在方法结束后才回收 在括号外只是访问权限 消失...
i n t f1(int val)
{
int *ptr;
if (val == 0) {
int val;
val = 5;
ptr = &val;
}
return (*ptr + 1);
}
1 4 0 U N I X环境高级编程
大家分析下这个题目
输出 6 是否说明栈空间在方法结束后才回收 在括号外只是访问权限 消失 使用指针还是能访问到的
{
int *ptr;
if (val == 0) {
int val;
val = 5;
ptr = &val;
}
return (*ptr + 1);
}
1 4 0 U N I X环境高级编程
大家分析下这个题目
输出 6 是否说明栈空间在方法结束后才回收 在括号外只是访问权限 消失 使用指针还是能访问到的
|
哦,看错了,你的val是在花括号里面定义的
这样是有隐患的,虽然结果可能是正确的
这样是有隐患的,虽然结果可能是正确的
|
空间虽然回收了,但该内存对应的数值在没有被覆盖前还是5,所以可以取到,但不代表这样做稳妥
|
输出 6 是否说明栈空间在方法结束后才回收 在括号外只是访问权限 消失 使用指针还是能访问到的
这个不能说明吧。
这个只能说明刚才的那个地址的数据没有改变。
这个不能说明吧。
这个只能说明刚才的那个地址的数据没有改变。
|
不会清理,内存的值还是保留之前的值,所以还是5