c/c++函数返回局部变量数组
来源:互联网 发布:数据库开发与管理 编辑:程序博客网 时间:2024/05/21 05:24
在c/c++中,是不应该返回局部变量数组的
这是因为在函数中,局部变量是存储在栈内存中的,而函数的返回是值拷贝
因此数组返回实际是返回指向栈内存中这个原数组的首地址,但是函数结束后
该内存是会被自动回收,因此该指向的栈内存是无效的。
但是在实际测试中,却出现一些奇怪的情况
char* get(){
char *a = "temp1";
return a;
}
这个是可以正确打印的,这是因为a是一个指针,其指向的是"temp1"这个常量字符串,而常量字符串是存储在文字常量区的,而返回a其实是返回该文字常量区中该常量字符串首地址
因此即使char *a本身的指针变量被回收,但是其所指向的常量字符串是程序结束后才被回收的,因此是有效的
char* get() {
char a[] = "temp1";
return a;
}
这个你在测试过程中,可能会发现依然能正确的打印出"temp1"这个值,但是并不是说这样就是对的
会出现这个原因你这段代码使用正常,是因为该数组占用的那片内存还没有被覆盖而已,事实上它已经无效了
这端的解释来源网站:http://bbs.chinaunix.net/thread-1553155-1-1.html
若你尝试多使用一些栈内存如
char* get() {
char a[] = "temp1";
return a;
}
char** get() {
char* a[7];
char temp1[] = "temp1";
char temp2[] = "temp2";
char temp3[] = "temp3";
char temp4[] = "temp4";
char temp5[] = "temp5";
char temp6[] = "temp6";
char temp7[] = "temp7";
a[0] = temp1;
a[1] = temp2;
a[2] = temp3;
a[3] = temp4;
a[4] = temp5;
a[5] = temp6;
a[6] = temp7;
return a;
}
然后在打印前面的值char a[]返回的值,你应该就能看到其打印的值可能是乱码或者是char* a[7]中的其中一个值,也就是char a[]在栈中的值其实是无效了,随时会被清除。
因此对于函数返回值,请不要使用局部变量,其在栈内存的数组值,这样会导致不确定的运行状态。
- c/c++函数返回局部变量数组
- C函数返回局部变量
- C 函数返回局部变量
- C函数返回局部变量
- c 函数 返回局部变量
- C函数返回局部变量
- C语言之函数返回局部变量
- C语言---函数返回局部变量
- C局部变量返回值
- C语言 -- 返回局部变量
- c语言返回局部变量
- C语言的那些秘密之---函数返回局部变量
- C语言的那些秘密之---函数返回局部变量
- C语言中函数返回局部变量的方法
- C语言函数不能返回局部变量的地址
- C语言的那些秘密之---函数返回局部变量
- C的那些秘密 -----函数返回局部变量
- C语言的那些秘密之---函数返回局部变量
- mysql入门笔记2
- 关于android 4.4以上版本从相册选取图片加载不了图片的问题
- 使用EF框架的增删改查和分页的公共类
- Java中包含继承关系时对象的创建与销毁顺序详解(附源码)
- Android Camera API2.0下全新的Camera FW/HAL架构简述
- c/c++函数返回局部变量数组
- hdu 1698
- python 正则表达式注意事项和re.match()和re.search()区别
- MySQL学习系列(1) -- MySQL数据库的介绍和快速安装
- ajax下载文件
- setResult(RESULT_OK, intent)回调不执行问题
- 开启Android程序时检测网络与GPS是否打开
- 我不是产品经理-001
- Ubuntu 14.04 LTS 软件安装及卸载