malloc/free和new/delete详解与应用
C++面试经常会问到关于malloc/free和new/delete的区别,网上有不同版本的解释,这里总结下并加上个人理解和使用。
两者相同点
1.都可以申请动态堆内存。
两者不同点
1.new/delete是C++的操作符,malloc/free是C/C++的标准库函数。
2.new申请的可以理解为对象,new时会调用构造函数,返回指向该对象的指针,delete时调用析构函数;malloc申请的只是内存,不是对象。
3.new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。
注意事项
1.用new申请的内存,必须用delete释放。
2.用new[]申请的内存,必须用delete[]释放。
3.delete释放内存后,指针值不变,良好的风格是释放后指针置为NULL,如,delete p; p = NULL。
4.用malloc申请的内存,必须用free释放。
使用
#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
#include <string.h>
struct Stu
{
char name[32];
int age;
};
int main()
{
/**************************** 基本用法 **********************************/
//申请一个int类型
int *p1 = new int; //直接申请赋值 int* p1 = new int(3);
int *p2 = (int*)malloc(sizeof(int));
//申请一个char类型
char *p3 = new char; //直接申请赋值 char *p3 = new char('c');
char *p4 = (char*)malloc(sizeof(char));
//申请一个int型一维数组
int *p5 = new int[5]; //直接申请赋值 int *p5 = new int[5]{1,2,3,4,5};
int *p6 = (int*)malloc(sizeof(int)*5);
//申请一个char型一维数组
char* p7 = new char[6]; //直接申请赋值 char* p7 = new char[3]{'a', 'v', 'c'};
char* p8 = (char*)malloc(sizeof(char)*6);
//申请一个int型二维数组
int(*p9)[2] = new int[2][2]; //直接申请赋值 int(*p9)[2] = new int[2][2]{ 1,2,3,4 };
int(*p10)[2] = (int(*)[2])malloc(sizeof(int)*2*2);
//申请一个char型二维数组
char(*p11)[2] = new char[2][2];
char(*p12)[2] = (char(*)[2])malloc(sizeof(char)*2*2);
/***************************** 申请二级指针内存 **********************************/
//申请二级指针(new,delete)
char** p13 = new char*[2];
p13[0] = "aaaaaaaaaa";
p13[1] = "vvvvvvvvvv";
delete p13;
//申请二级指针(malloc, free)
char** p14 = (char**)malloc(sizeof(char*)*2);
p14[0] = "cccccccc";
p14[1] = "dddddddd";
delete p14;
/****************************** 申请结构体内存 *********************************/
//new delete
Stu* pStu1 = new Stu;
Stu* pStu2 = new Stu{"wpf", 10};
Stu* pStu3 = new Stu[1024];
delete pStu1;
delete pStu2;
delete[] pStu3;
//malloc free
Stu* pStu4 = (Stu*)malloc(sizeof(Stu));
memset(pStu4, 0, sizeof(Stu));
free(pStu4);
getchar();
}
欢迎加群交流:C/C++开发交流

malloc/free和new/delete详解与应用的更多相关文章
- C++ 内存分配操作符new和delete详解
重载new和delete 首先借用C++ Primer 5e的一个例子: string *sp = new string("a value"); ]; 这其实进行了以下三步操作: ...
- C++ new/delete详解及原理
学了冯诺依曼体系结构,我们知道: 硬件决定软件行为,数据都是围绕内存流动的. 可想而知,内存是多么重要.当然,我们这里说的内存是虚拟内存(详情看Linxu壹之型). 1.C/C++内存布局 2.C语言 ...
- OAF_EO系列6 - Delete详解和实现(案例)
2014-06-14 Created By BaoXinjian
- RMAN主要命令 show,list,crosscheck,delete详解
Oracle RMAN 的 show,list,crosscheck,delete命令整理 Oracle RMAN 的 show,list,crosscheck,delete命令整理 1.SHOW命 ...
- 动态内存管理详解:malloc/free/new/delete/brk/mmap
c++ 内存获取和释放 new/delete,new[]/delete[] c 内存获取和释放 malloc/free, calloc/realloc 上述8个函数/操作符是c/c++语言里常用来做动 ...
- new、delete与malloc、free的详解
内容清单: 1. C语言中的函数malloc和free 2. C++中的运算符new和delete 3. new/delete与malloc/free之间的联系和区别 4. C/C++程序的内 ...
- C++之new/delete/malloc/free详解
主要内容: 1. C语言中的函数malloc和free 2. C++中的运算符new和delete 3. new/delete与malloc/free之间的联系和区别 4. C/C++程序的内 ...
- malloc 与 free函数详解<转载>
malloc和free函数详解 本文介绍malloc和free函数的内容. 在C中,对内存的管理是相当重要.下面开始介绍这两个函数: 一.malloc()和free()的基本概念以及基本用法: 1 ...
- 原生JS:delete、in、typeof、instanceof、void详解
delete.in.typeof.instanceof.void详解 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/doc ...
随机推荐
- 2019 ICPC 沈阳网络赛 J. Ghh Matin
Problem Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurr ...
- Hadoop namenode连接journalnode限制导致集群启动失败
错误1:刚搭建的新集群,启动journalnode以后,格式化namenode节点,出现如下错误 注意其中划红线的地方. 出现这个错误的原因是journalnode节点还没有准备好,而namenode ...
- 分布式文件上传 spring boot + fastdfs + dropzone
1.首先安装fastDFS 参考链接: https://www.funtl.com/zh/spring-cloud-itoken-codeing/%E5%88%86%E5%B8%83%E5%BC%8F ...
- java之map遍历
java开发中常常会用到遍历,所以下边就列举四种map的遍历方法. public class testMap { public static void main(String[] args) { Ma ...
- linux下 安装 ImageMagick 及其 php imagick扩展(转)
linux下 安装 ImageMagick 及其 php imagick扩展 PHP版本7.1.3 : ImageMagick版本 ImageMagick-7.0.8-3: PHP扩展imagick版 ...
- hystrix流程图收藏
最近在看张开涛的亿级流量的书,学习了一个新的防雪崩的功能hystrix,在学习这个功能的过程中,看了一些网站也温习了一些知识,例如double_check locking功能,还有cache的击穿作为 ...
- JavaScript Functional Programming:声明式与命令式
函数式编程属于声明式编程(declarative programming)的范畴,经常跟声明式编程一块儿讨论的是命令式编程(imperative programming),因为它们是两种不太一样的风格 ...
- 从零配置webpack(react+less+typescript+mobx)
本文目标 从零搭建出一套支持react+less+typescript+mobx的webpack配置 最简化webpack配置 首页要初始化yarn和安装webpack的依赖 yarn init -y ...
- Java中声明泛型方法
泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:public class Test<T>{}.这样就定义了一个泛型类Test,在实例化该类时,必须指明泛型T的具体类 ...
- [Feature] Feature selection
Ref: 1.13. Feature selection Ref: 1.13. 特征选择(Feature selection) 大纲列表 3.1 Filter 3.1.1 方差选择法 3.1.2 相关 ...