《从缺陷中学习C/C++》——6.11 函数中途退出忘记释放内存
2023-09-11 14:17:38 时间
本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.11节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
从缺陷中学习C/C++
代码示例
int func(char* in, int inlen) char *p = new char[20]; if ( inlen 20 ) { return 0; strncpy(p, in, 20); delete [] p; return 1;
现象 结果
若inlen 20,则函数中途退出,而未释放内存,导致内存泄露。
Bug分析
上述代码中,func函数内new了一块内存,在if条件分支中,没有释放内存,就直接return 0,致使函数在条件分支中退出,导致了内存泄露。
正确代码
在程序退出前添加释放内存语句 delete [] p。
if ( inlen 20 ) { delete [] p; return 0;
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
分享
爱上c++的第一天:内存存储模型,引用和函数方面的知识 在运行的时候调用程序分配内存可以在任何时候决定分配内存即分配的大小,用户自行决定在何时释放。堆中的所有东西都是匿名的,不能用名字访问,只能通过指针来访问。
C++内存分区模型分析与实例以及扩展 C++程序在执行时,将内存大方向划分为**5个区域** - 代码区:存放**函数体的二进制代码**,由操作系统进行管理的 - 全局区(静态区):存放**全局变量和静态变量以及常量** - 常量区:**常量**存储在这里,不允许修改 - 栈区:由编译器自动分配释放, 存放**函数的参数值**,**局部变量等** - 堆区:**由程序员分配和释放**,若程序员不释放,程序结束时由操作系统回收
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- C++ 反反调试(PEB)
- c++之函数值传递和引用传递解析----关键在于理解函数return的实现机制(内存分配)
- [c++菜鸟]《Accelerate C++》习题解答
- 复盘:c++中64位和32位操作系统内存中,指针类型占用多少内存空间
- 【侯捷】C++内存管理机制
- 使用GDB命令行调试器调试C/C++程序
- C++程序开启大地址(虚拟内存),让32位程序使用4G内存的方法,虚拟内存概念及寻址范围详解
- C++程序内存分配方式(堆与栈)
- error while loading shared libraries: libstdc++.so.6: cannot open shared obj
- 《易学C++(第2版)》——2.7 方法指导
- 《从缺陷中学习C/C++》——6.13 临时变量内存不能返回
- 基于C++实现(控制台)文献管理系统【100010604】
- 基于QT(C++)实现(图形界面)通讯录系统【100010321】
- Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式)
- C++ STL基本容器的使用
- 让自己的C++程序(非服务程序)运行为一个windows service
- 116、【回溯算法】leetcode ——17. 电话号码的字母组合:回溯法:哈希映射+字符串数组映射(C++版本)
- C和C++内存分配方式记录
- C++实现内存检测原理浅谈