free和delete

malloc、free和new、delete的用法总结 mallo和new的用法也是经常容易被混淆,很多人只知道一个是c语言里的,一个是c++里的,一知半解吧,或万一真被面试官问到,就真的悔不当初了,那咱就做一个总结吧,也不深究太底层,就是为了把它们的大致用处和基本原理理清楚一遍。 1、malloc和free函数 malloc中文叫做动态内存分配,如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。 (类型 *)malloc(int s... 阅读详情

free 与 delete

1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间

2. delete [] 用于释放 new [] 分配的空间

3. delete 释放空间的时候会调用 相应对象的析构函数

     顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存

4. 调用free 之前需要检查 需要释放的指针是否为空,使用delete 释放内存则不需要检查指针是否为NULL

5. free 和 delete 不能混用,也就是说new 分配的内存空间最好不要使用使用free 来释放,malloc 分配的空间也不要使用 delete来释放

     举个例子,<string.h>里通常有个strdup函数,它得到一个char*字符串然后返回其拷贝:

     char * strdup(const char *ps); // 返回ps所指的拷贝

     在有些地方,c和c++用的是同一个strdup版本,所以函数内部是用malloc分配内存。这样的话,一些不知情的c++程序员会在调用strdup后忽视了必须对   strdup返回的指针进行free操作。为了防止这一情况,有些地方会专门为c++重写strdup,并在函数内部调用了new,这就要求其调用者记得最后delete。你可以想象,这会导致多么严重的移植性问题,因为代码中strdup以不同的形式在不同的地方之间颠来倒去。

 

 引用原文:http://www.cnblogs.com/zhuyp1015/archive/2012/07/20/2601698.html

C++——多次free和delete导致错误 多次free和delete将会导致错误:                      free:一次free一个指针的时候,只是清空该指针所指的堆中的对应空间,但该指针变量在栈中的值并没有没清空,它还是指向原来分配的内存空间(但是该内存空间已经不属于该指针了,CPU随时可把该指针原来所指的空间分配给任何一个指针变量)。这时,再free一次时,由于该指针已经没有堆空间与之对应了,所以编译器将会提示 阅读详情

相关推荐

APM32F103 配置CAN

摘要: 本文介绍了基于APM32F103RCT6的CAN通信实现,包含GPIO初始化、CAN配置、数据收发功能。通过配置CAN1的GPIO引脚(PB8/PB9)和波特率(500Kbps),实现标准帧格式的数据传输。发送函数支持8字节数据包,接收函数通过FIFO0处理消息,并根据接收ID触发响应发送(如ID 0x1回复0x2)。代码还包含错误状态检测(如总线关闭处理)和过滤器配置(32位掩码模式)。整体实现了基础的CAN通信与错误管理功能。

weixin_43676660的博客 862

free 与 delete

1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间 2. delete [] 用于释放 new [] 分配的空间 3. delete 释放空间的时候会调用 相应对象的析构函数      顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存 4. 调用free 之前需要检查 需要释放的指针是否为...

weixin_33851177的博客 944

智能家居DIY:用51单片机实现三合一环境监测(温湿度+烟雾+自动灭火)

本文详细介绍了如何利用STC89C52单片机打造智能家居三合一环境监测系统,集成温湿度检测、烟雾报警和自动灭火功能。从硬件选型、电路设计到软件编程,提供完整的DIY方案,帮助读者构建高性价比的家庭安全防护系统,特别适合智能家居爱好者和电子DIY初学者。

yhn4567890的博客 690

面试题:delete和free区别

在C++中,delete和free都可以用来释放动态分配的内存。

jakelihua 1725

LIN协议栈 AUTOSAR架构下 状态管理

LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。

汽车电子从业者,电子爱好者。 2051

无限泛化!AI背景文字识别,腾讯文字六宫格

本文介绍了生成大规模文字验证码数据集的方法,通过使用上百种字体和2万+字库,结合随机背景和数十种图像增强技术,生成了2000万+的多样化样本。该方法采用二阶段训练策略,确保模型对字体、形态、形变等具有强泛化能力,可适配腾讯、咸鱼等多种平台的文字验证码识别,包括生僻字和复杂形变情况。生成的模型在多种验证码场景下表现优异,但强调该方法仅用于技术研究,严禁非法用途。

码王吴彦祖的博客 563

free和delete区别

free和mall匹配:释放malloc出来动态内存; delete和new匹配:释放new出来的动态内存空间。 1, malloc/free是c/c++标准库的函数,new/delete除了分配空间还会调用构造函数和析构函数进行初始化和清理(清理成员)。 2, malloc/free需要手动计算类型大小且返回值是void*,new/delete可以自己计算类型大小,返回对应的指针。

prerfect_cat的博客 8617

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

C++ 中的free()和delete

malloc()、calloc() 或 realloc()使用 new 运算符或 NULL 指针分配。delete 删除数组示例。

Reliey__的博客 2453

大语言模型在金融风险预警中的推理应用探索

金融行业一直面临着各种风险,如信用风险、市场风险、操作风险等。准确及时的风险预警对于金融机构的稳定运营和投资者的利益保护至关重要。传统的金融风险预警方法主要基于结构化数据和统计模型,虽然在一定程度上能够识别风险,但对于非结构化数据的处理能力有限,难以捕捉到复杂的风险因素和潜在的风险趋势。大语言模型作为自然语言处理领域的重要突破,具有强大的语言理解和生成能力,能够处理各种形式的文本数据。

AI天才研究院 1169

基于FPGA的BP神经网络Verilog设计与Matlab仿真

BP(Backpropagation)神经网络是一种常见且广泛应用的神经网络类型,通过反向传播算法实现训练和学习。本文将介绍如何使用Verilog语言在FPGA上设计一个简易的BP神经网络,并使用Matlab进行仿真验证。BP神经网络由输入层、隐藏层和输出层组成。在上述Verilog代码中,我们定义了BP神经网络的输入层、隐藏层和输出层的神经元数量,并声明了相应的信号和参数。在上述Verilog代码中,我们定义了BP神经网络的输入层、隐藏层和输出层的神经元数量,并声明了相应的信号和参数。

2301_79326254的博客 560

C++ 中的 delete 和 free()

delete 和 free() 的区别

明朗晨光的专栏 912

PID、模糊PID、SkyHook、LQR、H2/H∞、ADRC等悬架控制合集

PID、模糊PID、SkyHook、LQR、H2/H∞等悬架控制合集

Mr.邹的博客 2013

理解delete和free

1、关于delete和free的区别   首先,malloc是库函数,而delete是操作符 申请数组时候使用的区别,如int *p=(int*)malloc(100*sizeof(int)),释放内存的时候直接 free(p)即可,而当int *p=new int[100]释放的时候应为delete []p,注意[]的作用说明释放的是一个数组的内存,如果delete p则只是释放的

pandafxp的专栏 8197

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Free和Delete

1. delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间2. delete [] 用于释放 new [] 分配的空间3. delete 释放空间的时候会调用 相应对象的析构函数     顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存4. 调用free 之前需要检查 需要释放的指针是否为空,使用dele

gouhexiong1989的博客 724

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

delete和free的区别

delete在释放内存后,能够确保内存内容被释放,并合并成一块可用的空间。free不具备任何行为保证,释放后的地址空间中仍可能存在原来数据的残留物,甚至可能覆盖其他已经被释放的对象。delete具有行为保证(即无论是否出错都会表现一致),能够确保释放内存不会对其他对象造成影响。delete是C++语言自带的运算符,对于类对象进行删除时调用类的析构函数。free是C标准库函数,仅释放空间,不会释放一个类(或者结构体)对象的空间。允许全局或类特定的重载,支持自定义内存管理策略(如内存池)。

himselfd的博客 493

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

free 和delete,你到底做了些什么事情?

在指针满天飞的C/C++世界,是否已经熟悉并默认了一些东西,而让我们失去了更深刻思考的能力?也许你对new/delete 或者malloc/free已经司空见惯,可曾相关在你手下delete/free一块对内存,到底发生了什么?请看下面的程序:

Jackery's Special Column 3908

malloc free和new delete的区别

malloc和free是c语言中的库函数,使用时需要用到指定的头文件<stdlib.h>,new和delete是c++里面的操作符,不需要依赖头文件,但是需要编译器支持。它们有一定的共同点,它们的共同特征就是用来分配内存和释放内存,它们也存在着一定的差异,我们就主要来说求他们之间的差异。

shuyaaaa的博客 973

C++中new/delete 和malloc/free的区别

1、new、delete是C++中的操作符,而malloc和free是标准库函数。2、对于非内部数据对象来说,只使用malloc是无法完成动态对象要求的,一般在创建对象时需要调用构造函数,对象消亡时,自动的调用析构函数。而malloc free是库函数而不是运算符,不在编译器控制范围之内,不能够自动调用构造函数和析构函数。而NEW在为对象申请分配内存空间时,可以自动调用构造函数,同时也可以完成对对...

gaosaixing的博客 1万+

new、delete和malloc、free

图片来源。

qaaaaaaz的博客 1186

C++中malloc、free和new、delete一文吃透

主要讲malloc/free和new/delete的区别和底层实现,本文应该是讲的很详细了,只看这一篇文章就好啦!

weixin_61360713的博客 2904

new 和 malloc free 和 delete 的区别

在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,new/malloc申请动态内存,操作系统无法自动回收,需要对应的delete/free释放空间。那他们之间的区别在哪? 区别 1. malloc/free 是c语言中的库函数,需要头文件支持;而new/delete 是c++中的关键字 2. 使用new操作符时编译器会根据类型信息自行计算所需...

ii0789789789的博客 2383

【基础】new delete 和 malloc free分析

首先需要调用上面提到的 operator new 标准库函数,传入的参数为 class A 的大小,这样函数返回的是分配内存的起始地址,这里假设是 0x007da290。答:C++ 的做法是在分配数组空间时多分配了 4 个字节的大小,专门保存数组的大小,在 delete [] 时就可以取出这个保存的数,就知道了需要调用析构函数多少次了。最后一步就是返回新分配并构造好的对象的指针,这里 t 就指向 0x007da290 这块内存,t 的类型为类 Test_newdelete 对象的指针。

沭沭wen 664

new/delete和malloc/free的区别联系

1.先来谈谈new和delete 在C++中堆内存的分配和释放是通过new和delete来操作的,它们和C语言的malloc和free有什么区别呢? (1)new的底层也是通过malloc来开辟内存的 new比malloc多一项功能,就是开辟完内存,还可以进行初始化操作 如下: int *p = new int(10); 上面是new的基本操作,10代表堆上开辟的整形内存的初始值;如果是自定义类类型的话,如下: Test *p = new Test(); // Tset是一个实现定义好的类 这个语句不

qq_37535749的博客 1389

new、delete和malloc、free的区别

malloc、free和new、delete的区别

qq_50993361的博客 929

new /delete和malloc/free

对于基本数据类型(或称为内置类型,如 char, int, double 等),new 和 delete 确实在行为上与C语言中的 malloc 和 free 类似,但它们在C++的上下文中具有更多的功能和安全性。综上所述,虽然对于内置类型而言,new/delete和malloc/free在功能上可能没有明显区别,但从安全性、可读性、可移植性和最佳实践的角度来看,new/delete是更好的选择。通过显式地分配和释放内存,我们可以更容易地跟踪和管理内存的使用情况,从而避免内存泄漏和其他与内存相关的问题。

m0_71808911的博客 1906
上一篇: SVN使用教程
下一篇: C++对参数直接赋值
CHF_VIP
博客等级 码龄14年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值