c++函数返回局部变量
2015-08-22 15:22
351 查看
char* func() { char arr[] = "Hello,World\n"; // arr[] 所有元素保存在栈内存上 return arr; // 返回局部变量或临时变量的地址 /*即返回了指向栈内存的指针,而返回后栈内存都会被自动回收,main里面接收到的地址指向的内存已经不存在,变为野指针 */ } int main() { printf("%s", func()); // 打印出垃圾数据,也可能打印出 "Hello,World,取决于编译器对栈内存回收的处理方法 return 0; }
改进方法如下:
char* func() { char *arr = "Hello,World\n"; // "Hello,World\n" 保存在只读常量区,非栈内存不受函数返回影响 return arr; // 其实返回的是 arr 的副本,返回后 arr 变量也销毁,但是其指向常量区不受影响 } int main() { printf("%s", func()); // 能打印出 Hello,World getchar(); return 0; }
char* func() { static char arr[] = "Hello,World\n"; // "Hello,World\n" 保存在静态存储区,非栈内存不受函数返回影响。 return arr; //返回指向静态存储区的指针 } int main() { printf("%s", func()); // 能打印出 Hello,World return 0; }
相关文章推荐
- c语言全局变量和局部变量问题及解决汇总
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- sqlserver 局部变量的使用
- 全局变量与局部变量在内存中的区别详细解析
- 关于全局变量和局部变量的那些事
- javascript中局部变量和全局变量的区别详解
- javascript 用局部变量来代替全局变量第1/2页
- c++静态局部变量和静态函数示例
- awk实现Left、join查询、去除重复值以及局部变量讲解例子
- Android中的全局变量与局部变量使用小结
- Android中的全局变量与局部变量使用小结
- 探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题
- python函数局部变量用法实例分析
- Python函数中的局部变量和全局变量
- 什么是局部变量
- javascript闭包
- Javascript笔记(对象如何创建、对象如何继承)
- 全局变量 局部变量
- 成员变量和局部变量的区别
- 从Hello World 之C程序起步浅谈函数