文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++中new和malloc的区别及使用

2023-06-04 09:19

关注

本篇内容介绍了“C++中new和malloc的区别及使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

定义上:malloc memory allocation 动态内存分配 是c中的一个函数

使用方法:

extern void *malloc(unsigned int num_bytes)

extern void *malloc(unsigned int num_bytes)

um_bytes内存块字节长度。

内存块大小确定:malloc是通过我们计算然后得到一块新内存,然后指定数据类型并且内存值也是随机的。

使用时:需要引入头文件库函数 stdlib.h 或是 malloc.h(malloc.h与alloc.h一致)。

内存分配位置:堆中动态分配的内存。

具体分配过程:由程序向操作系统申请,操作系统遍历空闲结点链表,将第一个大于申请空间的堆结点分配给程序,然后将空闲结点链表中此节点删掉。

成功分配:返回值为指向被分配内存的指针。

失败分配:返回值为空NULL。

返回类型:void* (未确定类型的指针)。

void*类型可以通过强制类型转换转换为任意其他类型(因为用户存储数据类型未知,由用户决定数据类型)。

内存块释放:free()函数 将内存还给程序或操作系统。

注意:malloc与free都属于c/c++标准库函数,在使用时应该配对 申请之后不释放就会有可能发生内存泄漏。

使用free时需要检查指针是否为空。

ew 是c++中的运算符(其地位等同于“+”,“=”)。

在使用:new时不止分配内存,还会进行初始化,执行相应构造函数,初始化时需要指定数据类型。

内存分配位置:自由存储区为对象分配内存。

使用时:无需引入头文件,new是保留字。

ew 和 delete 是配对使用的。

在使用delete时注意将指针置为0,否则会形成悬垂指针(指针所指内存已被释放,仍指向该内存),造成错误。

ew 可以看做是malloc 加 构造函数的执行,就是new更高级一些。

ew的几种用法:

1 int *p=new int; //在自由存储区开辟一个int变量 2 int *p=new int[10];//在自由存储区开辟一个int数组,有10个元素 3 int *p=new int(10);//在自由存储区开辟一个int变量,并初始化为10

释放内存时无需检查是否为空。

如果p等于NULL,则delete p不作任何事情。由于之后可以得到测试,并且大多数的测试方法论都强制显式测试每个分支点,因此你不应该加上多余的 if 测试。

错误的:

1 if (p != NULL) 2 delete p; 3正确的:delete

面试时可能会问到的问题:

1)它们都可用于申请动态内存和释放内存。

2)malloc是库函数只能作用于内部数据类型,对于非内部数据动态对象而言,就不能完成对象的初始化与销毁,即执行构造函数与析构函数,而new 与 delete此类运算符就能够在编译器的控制权限内完成,对象的初始化与销毁任务,即执行构造函数与析构函数。

既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

我们不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。

注意:如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。

如果用delete释放“malloc申请的动态内存”,结果也会导致程序出错,但是该程序的可读性很差。所以new/delete必须配对使用,malloc/free也一样。

零值指针,是值是0的指针,可以是任何一种指针类型,可以是通用变体类型void*也可以是char*,int*等等。 空指针,其实空指针只是一种编程概念,就如一个容器可能有空和非空两种基本状态,而在非空时可能里面存储了一个数值是0,因此空指针是人为认为的指针不提供任何地址讯息。

内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。

“C++中new和malloc的区别及使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯