杜绝返回函数内局部变量的指针或引用
2015-08-30 17:05
375 查看
杜绝返回函数内局部变量的指针或者引用
//函数定义
char *GetStr()
{
char str[] = "hello" ;// 局部变量,函数运行完释放
return str;
}
char *GetStr2()
{
char *str2 = "hello";//“hello”保存在只读常量去,不在栈内分配
return str2; //返回str2的副本(str2被注销)
}
char *GetStr3()
{
char *str3= new char[6]; //在堆区分配,如果没用delete,则内存不释放,导致内存泄露(这里只是为了举例子)
str3[0] = 'h';
str3[1] = 'e';
str3[2] = '1';
str3[3] = '1';
str3[4] = 'o';
str3[5] = '\0';
//str3未释放,导致内存泄露(这里只是为了举例子);
return str3;
}
int main()
{
char *p = GetStr();
char *p2 = GetStr2();
char *p3 = GetStr3();
printf("%s\n", p);
printf("%s\n", p2);
printf("%s\n", p3);
}
运行结果如下图:
//函数定义
char *GetStr()
{
char str[] = "hello" ;// 局部变量,函数运行完释放
return str;
}
char *GetStr2()
{
char *str2 = "hello";//“hello”保存在只读常量去,不在栈内分配
return str2; //返回str2的副本(str2被注销)
}
char *GetStr3()
{
char *str3= new char[6]; //在堆区分配,如果没用delete,则内存不释放,导致内存泄露(这里只是为了举例子)
str3[0] = 'h';
str3[1] = 'e';
str3[2] = '1';
str3[3] = '1';
str3[4] = 'o';
str3[5] = '\0';
//str3未释放,导致内存泄露(这里只是为了举例子);
return str3;
}
int main()
{
char *p = GetStr();
char *p2 = GetStr2();
char *p3 = GetStr3();
printf("%s\n", p);
printf("%s\n", p2);
printf("%s\n", p3);
}
运行结果如下图:
相关文章推荐
- 自定义Adapter的listview(很重要)
- openwrt 端口回流的关键
- 面试题30.最小的k个数
- C99标准支持结构体按成员名称进行指定初始化。
- 数组知识点
- 通过/dev/mem实现用户层访问GPIO寄存器
- 正则表达式
- HttpSession
- maven的一些错误
- [Leetcode] Binary Tree Paths
- APK反编译二次打包工具和方法
- Codeforces Round #318 B - Bear and Three Musketeers
- python 爬虫3 新浪微博 爬虫 实战
- 自定义adapter的基础上Listview优化方案以及几个小错误(checkbox吃掉点击事件以及对象重复问题)
- windows下,将免安装的tomcat加入系统服务
- PostCSS一种更优雅、更简单的书写CSS方式
- HUD5423 Rikka with Tree(DFS)
- 搜索算法
- CameraRotateAroundTarget
- 反射相关知识点小结