C 语言与 C++在内存分配有什么区别?

在C语言中通过malloc和free来分配、释放内存空间;在C++语言中通过new和delete来分配和释放内存空间。


malloc/free和new/delete的主要区别:
1)malloc/free是库函数,new/delete是操作符。

2)malloc是从上开辟空间,而new是从自由存储区开辟;(自由存储区是 C++抽象出来的概念,不仅可以是堆,还可以是静态存储区)。

3)new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数 ;malloc 仅仅分配内存,free仅仅回收内存。

4)返回值问题,malloc开辟成功返回void*,需要进行强制类型转换,失败返回NULL;new成功返回对象指针,失败抛出异常。

5)使用free之前要判断,要free的指针是!NULL的,使用delete则无须判断。


free()释放的是指针指向的内存!注意!释放的是内存,不是指针!这点非常非常重要!指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。非常重要啊这一点!

21.C 语言与 C++在内存分配有什么区别?相关推荐

  1. c语言链表内存分配失败,链表的C语言实现之动态内存分配

    链表的C语言实现之动态内存分配 來源:互聯網  2008-06-01 02:05:07  評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...

  2. C语言 :学习动态内存分配

    文章目录 C语言动态分配 为什么存在内存分配? 动态内存函数的介绍 `malloc` `free` `free`函数的**作用原理**是: 使用后将指针赋为`NULL` `calloc` 运用一次`c ...

  3. c语言链表动态分配内存,链表的C语言实现(含动态内存分配)

    转自:http://blog.csdn.net/21aspnet/article/details/146968 链表的C语言实现(含动态内存分配) 上 链表的C语言实现之动态内存分配 一.为什么用动态 ...

  4. C语言中的动态内存分配

    大家好,今天简单讲一讲C语言中的动态内存分配. 补充:C程序中的内存块. 在C程序中,通常将内存划分为以下六个区域: (1)内核区域.这块区域是操作系统的,用户不能使用. (2)栈区.主要用于存放运行 ...

  5. C语言的变量的内存分配

    今晚看了人家写的一个关于C语言内存分配的帖子,发现真是自己想找的,于是乎就收藏了... 先看一下两段代码: char* toStr() {char *s = "abcdefghijkl&qu ...

  6. c语言 malloc_C语言快速入门——动态内存分配

    在前面一系列的字符串操作中,我们都是先定义一个固定大小的字符数组,然后根据所需,或拷贝.或连接.或格式化来为这个数组提供内容.固定大小的数组意味着在程序运行期间,数组所占用的内存是确定的(即划分了固定 ...

  7. c语言紧凑算法的内存分配,C语言(第二章.1)算法与数据结构A.ppt

    C语言课件(第二章.1)算法与数据结构A资料 课程设置目的 本课程是非计算机专业学生的技术基础课,通过本课程的学习,应使学生掌握传统的结构化程序设计的一般方法,以C为语言基础,培养学生严谨的程序设计思 ...

  8. c语言 sysinfo_操作系统:内存分配(C语言 winapi)

    //windows 内存分配. windows/visual stdio*/cl xxx.cpp #include #include#include#include#include#include#i ...

  9. C语言学习笔记---动态内存分配

      数组在内存中时存储在连续的位置上,当声明一个数组的时候,编译器就会在内存中分配它所需要的空间,但是有时候还需要使用动态内存为数组分配空间.   比如现在要同统计一个班级学生的成绩,可以申请一个固定 ...

最新文章

  1. 在Eclipse上搭建Android C开发环境
  2. 计算机绘图cg,CG专业英语整理
  3. Sentry异常监控方案部署-前端攻略
  4. css3中的 @Keyframes
  5. oracle11g dataguard物理备库搭建
  6. loadrunner11完整卸载
  7. MYSQL绿色安装过程
  8. 页面定时跳转的js和php的代码实现和页面定时刷新
  9. 动态添加上传控件,并上传文件
  10. android自定义日历插件,Android自定义日历控件实例详解
  11. ubuntu中使用ab压测
  12. #1829 : Tomb Raider(哈希)
  13. vue-amap 根据地址 查询经纬度
  14. 爬虫之模拟强智系统登录
  15. 思科 Packet Tracer 实验六 路由协议基本配置
  16. [NOIP2008] 立体图-解题报告
  17. 拉普拉斯算子的疑惑--拉普拉斯算子作用于矢量和定义Hessian矩阵时遇到的问题
  18. 笔记 | 产品经理必懂的技术(五)
  19. 这些年正Android - 身在他乡
  20. 电子商务巨头阿里巴巴正考虑在复杂供应链中使用区块链

热门文章

  1. 查看mysql库和表的大小(空间)
  2. 应用栈求解迷宫问题(C++实现)
  3. Simulink中进行电容充放电的一种简单仿真
  4. AAC音频文件时长计算
  5. Linux中利用RAW SOCKET直接通过网卡收发数据
  6. 编译原理学习笔记一(待续)
  7. 论文笔记:Group Equivariant Convolutional Networks
  8. QT配置opencv开发环境
  9. 关于arguments
  10. UIPasteboard