返回指向局部变量的指针 怎么还能通过地址找到值呢?
局部变量在函数结束后释放,那么主函数为什么还能通过地址访问到内容呢?
#include <stdio.h>
int* fun()
{
int b = 6;
int *p = &b;
return p;
}
int main(void)
{
int ch;
int *t = fun();
ch = *t;
printf("%d",ch);
return 0;
}
#include <stdio.h>
int** fun()
{
int a = 6;
int *p = &a;
int **pp = &p;
return pp;
}
int main(void)
{
int ch;
int **ppi = fun();
int *pi = *ppi;
ch = *pi;
printf("%d",ch);
return 0;
}
[解决办法]
释放的意思是你不管了,你不管了不代表别人立刻就要接管,别人什么时候接管,跟你没关系
[解决办法]
你自己假象的等式和推导:函数返回==局部变量在函数结束后(立即)释放==地址存储的内容(立即)被释放==不能通过地址找到值
而事实则如#1楼所说的
[解决办法]
这个地址是一直在那个地方的。
只是暂时还没用被其他程序占用。
不要太纠结了,这个不符合C语言的规范写法,
如果做项目的话,这样的代码是会出问题的,
可以看些编程规范的东西,有助于理解和写成优质的代码