问大家一个超级简单的问题 return 局部变量
例如:
#include <stdio.h>
int GetNum()
{
int b=2;
return b;
}
void main()
{
int i=GetNum();
printf("%d \n",i);
}
能返回2,但这不是返回局部变量吗?在程序调用完GetNum()之后,局部变量b不就销毁了吗?
而这个函数
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
int GetNum()
{
int b=2;
return b;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf(str);
}
就是因为返回了局部变量而错,这是为什,么????求大家指点
[解决办法]
不是不能返回局部变量,是不能返回指向局部变量的指针和引用。
[解决办法]
[解决办法]
第一个程序,返回b的值,没有问题。程序会把b中的内容放到堆栈里面返回。虽然b销毁了,但是b里面的内容返回了。
第二个程序,p里面是指针,这个指针在函数里面分配,函数退出销毁,那么,这个时候,你返回p当然就出错了
[解决办法]
return b返回的是值,又不是内存块(&b的话就出错了)
第2种情况就是内存块,这样销毁的时候,指针悬挂就出错啦
[解决办法]