局部变量用完会被释放,那么为什么*p还会是局部变量的数值? 局部变量i是如何被释放的?
答案:2 悬赏:20 手机版
解决时间 2021-03-07 14:16
- 提问者网友:我是女神我骄傲
- 2021-03-06 19:53
#include
int main(void)
{
int i = 1;
int* p;
if(1)
{
int i = 3;
p = &i;
}
printf("*p = %d\n",*p);
printf("i = %d\n",i);
return 0;
}
输出结果:
*p = 3
i = 1
最佳答案
- 五星知识达人网友:逃夭
- 2021-03-06 21:10
首先,代码中2个i是不同的变量,虽然名字相同,但在if(1)中,C编译器会将i认为是int i = 3;这个变量,离开if(1)后,才是int i = 1;这个变量。
导致“*p还会是局部变量的数值”的原因是,所谓释放,只是内存管理模块将 &i 这个内存空间标记为未使用,但里面的数据是不变的,*p指向这个地址,当然可以读出原来的值。
但这样的使用方法非常危险,因为当程序在释放 i 之后,又申请了一个内存空间,这时,*p指向的可能就是新申请的内存空间(而且不一定是这段空间的首地址),那么*p的值将无法预计,修改*p的值也将导致未知的后果。
全部回答
- 1楼网友:封刀令
- 2021-03-06 22:34
搜一下:局部变量用完会被释放,那么为什么*p还会是局部变量的数值? 局部变量i是如何被释放的?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯