char* fun()
{
char s1[10];
char *s2=new char[10];
//return s1; 报错,不能返回局部变量
return s2;
}
int main(int argc,char** argv)
{
char* s=fun();
delete[] s; //是否有必要??如果是返回const char*呢??
}
因为涉及到内存管理,实在太烦了
char s1[10]; 在函数内部定义局部变量从内存四区的角度来讲,其属于栈区。当你调用这个函数时候, 操作系统为char s1[10]; 在栈区分配空间,
然而函数调用结束后,操作系统会收回栈区。return s1,是一个已经被释放了空间内存地址。一般在编译没有报错,则执行的时候肯定会出错。
char *s2=new char[10]; 是你自己动态申请的内存,其是在堆区。函数调用完后,操作系统不会主动释放其空间。所以可以返回其首地址。正因为
操作系统不主动回收其内存,因此需要你主动释放。要想写好这样一类程序,一定要理解内存四区概念
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。