【求助】子函数定义一个字符串变量,返回指针。由数组和指针定义而出现的不同现象,挺有趣的!!
孤傲猎人 2017-10-30 07:30:32 #include <iostream>
#include <cstdio>
using namespace std;
char *func( )
{
char *s="abcde";
return s;
}
char *func2( )
{
char s[]="abcde";
return s;
}
int main()
{
char *str=NULL,*str2=NULL;
str=func();
cout<<str<<endl;
str2=func2();
cout<<str2<<endl;
return 0;
}
偶然间发现了一个非常有趣的现象,正常来说,函数funuc2()的运用是错误的,数组s是局部变量,内存中的位置应该是堆栈,该函数结束后,分配的内存收回,此时运行cout<<str2<<endl得到的是乱码,调试的结果也验证了这一点。
但是函数func()运行后,再运行语句cout<<str<<endl;得到确是“abcde”。。。。。s虽然是指针,但也是一个局部变量,函数func()结束后,其内存难道没有释放吗?小弟没有想明白,敬请各位同仁指导,谢谢啦!!附上运行结果图。