栈 返回
char *fun()
{
char a[5]="abcd";
char b[5];
strcpy(b,a);
return b;
}
这样为什么不行?局部变量用完销毁,但是我再定义一个char *p,p=b;再return p为什么没有问题了?不都是在站上吗
[解决办法]
因为这是一个巧合.
而且,不是用完销毁,是用完之后,被系统回收.
至于之后发生什么,你的代码已经无法控制, 之后可能说明:"一切皆有可能".
所以,不要吃惊
[解决办法]
你返回了一个不再受你控制的地址,那里面究竟有会什么内容你是无法去干涉的。
先把它传递给p只是骗过了编译器,但事情的本质没有发生改变,你返回的仍旧是个不可依赖的位置。