《从缺陷中学习C/C++》——6.13 临时变量内存不能返回
2023-09-11 14:17:38 时间
本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.13节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
从缺陷中学习C/C++
代码示例
char *initialize() char str[300]; char* ptr = str; return ptr; void useMyStr(char * str){ char tmp[300] = "123"; printf("%s\n", tmp); printf("%s\n", str); int main() char *myStr = initialize(); useMyStr(myStr); return 0;
现象 后果
返回的指针将指向一个不确定内容的地址。
Bug分析
在函数initialize中的本地变量char数组分配的内存在栈上,随着函数的返回会被收回。正确的做法是:返回指针对应的内存块需要用函数malloc动态分配。
正确代码
char *initialize() char *myStr = (char*)malloc(300); return ptr; void useMyStr(char * str){ char tmp[300] = "123"; printf("%s\n", tmp); printf("%s\n", str); int main() char *myStr = initialize(); if(myStr != NULL) useMyStr(myStr); delete myStr; return 0;
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
爱上c++的第一天:内存存储模型,引用和函数方面的知识 在运行的时候调用程序分配内存可以在任何时候决定分配内存即分配的大小,用户自行决定在何时释放。堆中的所有东西都是匿名的,不能用名字访问,只能通过指针来访问。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- C++内存管理(堆栈内存的区别、==和equal的区别)
- C++中的内存管理
- Win10系列:VC++调用自定义组件2
- C++学习笔记——常量定义
- C++ 内存泄漏
- C++11快餐教程(1)-通过using定义类型的别名
- C语言/C++常见习题问答集锦(二十六)
- Open3D(C++) 计算向量的夹角
- 《安富莱嵌入式周报》第293期:SEGGER开源其C/C++库源码emRun,丰富EMC电磁兼容资,OTA开源组件,2022 Github全球报告,内存安全指南
- paip.提升用户体验---c++ QLabel标签以及QLineEdit文本框控件透明 设置
- Puredev MemPro 1.6 C++ 内存分析器
- C++:C++编程语言学习之数组/指针的简介、案例应用之详细攻略
- 用C++的QT写一个能够实现TCP和UDP通信的网络调试助手代码
- C++数据结构--线性表的链式存储结构
- c++/c语言编译之后的exe文件应该如何运行-解决方法(实现应用)
- C和C++通用的头文件编写形式
- 遇到个C++ MAP问题,有谁会的么?
- C++使用技巧(二十八):回顾内存new关键字、引用、默认参数、 占位参数、重载、类和对象、构造函数
- c++ vector C++ vector存放结构体 并且排序
- C++继承时的对象内存位置(一)有成员变量遮蔽时的内存分布
- C++回调demo(线程版)(三十八)
- VC++检查程序托盘图标是否掩藏到沙漏区域中(附源码)
- C# 获取C++内存
- webrtc Native C++ 客户端的内存释放问题
- 非递归遍历二叉树---c++写法
- 学习C++:C++进阶(二)CMake工程简介
- 【维生素C语言】第十四章 - 浅析C/C++程序的内存开辟
- 全面介绍Windows内存管理机制及C++内存分配实例