《从缺陷中学习C/C++》——6.10 delete与delete[]的区别
2023-09-11 14:17:38 时间
本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.10节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
从缺陷中学习C/C++
代码示例
char *buff = new char[reslen]; delete buff;
现象 结果
申请的数组空间没有全部释放,造成内存泄露。用cppcheck工具执行静态代码扫描可以看到如下信息:(error) Mismatching allocation and deallocation: buf。
Bug分析
对于数组类型,如 string str = new string[10],用delete str和delete [] str的区别是,delete str只对str[0]调用了析构函数,而delete []str则对str数组里的每个元素都调用了析构函数。对于单个元素,如 int p =new int (10),delete和delete []都可以释放内存。
正确代码
char *buff = new char[reslen]; delete [] buff;
编程建议
操作内存的时候,new[]一定要和delete[]对应。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
【C++要笑着学】C++动态内存管理 | new/delete底层探索 | new/delete实现原理 | 定位new(二) 是这样的,C语言里的 动态内存管理 放到 C++ 里面,用起来不是那么爽,所以C++就对这一块进行了升级,本章我们就探索探索 C++的内存管理,顺便复习一下C语言里讲过的动态内存管理的知识。学完本章,单身的同学不用怕了,以后没有对象我们可以 new 一个
【C++要笑着学】C++动态内存管理 | new/delete底层探索 | new/delete实现原理 | 定位new(一) 是这样的,C语言里的 动态内存管理 放到 C++ 里面,用起来不是那么爽,所以C++就对这一块进行了升级,本章我们就探索探索 C++的内存管理,顺便复习一下C语言里讲过的动态内存管理的知识。学完本章,单身的同学不用怕了,以后没有对象我们可以 new 一个
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- C++内存池的实现和原理(一)
- C++学习7-面向对象编程基础(多态性与虚函数、 IO文件流操作)
- NVIDIA Jetson TK1学习与开发(五):helloworld的C版本与C++版本
- C/C++ Memory Layout
- C++ 命名空间
- C++ & OpenCV 零散学习总结
- 用 typeid 操作符 做一个C++数据类型大全
- paip.提升用户体验------c++ 拖曳使用总结..
- C++每日面试之static作用
- c++ vector 初始化_C++--vector()的用法
- cocos2dx3.2 画图方法小修改之 C++ final学习
- C++ Primer 学习笔记_2_高速入口(继续)
- C++函数模板的重载
- c++ sizeof
- 《Effective C++ 》学习笔记——条款03
- C++ Primer 学习笔记_38_STL实践与分析(12)--集成的应用程序容器:文本查询程序
- C/C++产生随机数
- ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)
- C++primer学习笔记(二)——Chapter 4
- C++ STL 教程
- HLS开发学习-07- Vivado HLS 中的 C++ 基本运算
- 【C++提高】reinterpreter_cast 重新解释类型
- C/C++学习笔记四
- C++字符串操作案例(字符串拼接、替换、分割、类型转换、截取)
- 讲通C/C++预编译/条件编译指令 #ifdef,#ifndef,#endif,#define,…
- C++使用技巧(二十六):unique、distance、accumulate搭配lambda函数表达式使用