当前位置: 首页 > news >正文

new/delete, malloc/free

区别:

  1. 首先new/delete是运算符,malloc/free是库函数。
  2. malloc/free只开辟内存不初始化;new/delete及开辟内存也初始化。
  3. 抛出异常的方式:new/delete开辟失败使用抛出bad_alloc;malloc/free通过返回值判断。
  4. malloc和new区别:malloc是c语言中一个库幻术函数,按字节为数据分配内存,返回类型是    ‘ void * ’。因为他不知道分配的内存会被用于什么类型的对象。 new是运算符,需要传入类型,new相当于运算符的重载函数 operator new ->返回值自动转成指定的类指针 int*
  5. free不管是释放单个内存还是数组内存都是函数的调用,传入内存的首地址即可,而delete在删除数组时需要加一个[].

有几种类型的new:

  •         int *p1 = new int (20) ;
  •         int *p2 = new (nothrow) int ;
  •         const int *p3 = new const int(40);
  •         int data = 0; int *p4 = new (&data) int (50);  指定内存地址

C++中,如何设计一个程序检测内存泄漏问题?

  • 内存泄漏就是new操作没有对应的delete,我们可以在全局重写上面这些函数,在new操作里面用映射表记录都有哪些内存被开辟过,delete的时候把相应的内存资源删除掉,new和delete都有对应关系
  • 如果整个系统运行完了,我们发现,映射表记录的一些内存还没有被释放,就存在内存泄漏了!
  • 我们用我们自定义的new和delete重载函数 接管整个应用的所有内存管理 ,对内存的开辟和释放都记录;也可以通过编译器既定的宏和API接口,把函数调用堆栈打印出来,到底在哪个源代码的哪一页的哪一行做了new操作没有delete
     
http://www.lryc.cn/news/162467.html

相关文章:

  • oracle将一个用户的表复制到另一个用户
  • C#知识点、常见面试题
  • 【STM32】锁存器
  • DGIOT-Modbus-RTU控制指令05、06的配置与下发
  • 机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读
  • 计算机网络-谢希任第八版学习笔记总结
  • 手写Spring:第5章-注入属性和依赖对象
  • 初识集合框架 -Java
  • 目标检测笔记(十五): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
  • 深眸科技自研轻辙视觉引擎,以AI机器视觉赋能杆号牌识别与分拣
  • Shell命令管理进程
  • python创建exe文件
  • 【数据结构】AVL树的插入与验证
  • 9.3.3网络原理(网络层IP)
  • 代码随想录算法训练营第四十八天| LeetCode121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
  • C++新经典10--vector以及其使用
  • std : : vector
  • AJAX学习笔记8 跨域问题及解决方案
  • webhook--详解(gitee 推送)
  • 高速路自动驾驶功能HWP功能定义
  • Leetcode113. 路径总和 II
  • 分布式锁之redis实现
  • Idea中如何在一个项目中引入其他子模块?
  • UDP协议概述
  • Python-tracemalloc-跟踪内存分配
  • 02 CSS技巧
  • Yarn资源调度器
  • android上架备案公钥和md5获取工具
  • SpringBoot系列(12):SpringBoot集成log4j2日志配置
  • HTML事件列表