博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++内存分配 - malloc vs new 以及 delete vs free
阅读量:4072 次
发布时间:2019-05-25

本文共 811 字,大约阅读时间需要 2 分钟。

1.malloc() vs new

1) new会调用构造函数,而malloc() 不能。实际上new 也可以用来初始化原始数据类型(char, int, float.. 等)。

例如,下面程序会输出10。

#include
using namespace std; int main(){ int *n = new int(10); //使用new()初始化 cout << *n; getchar(); return 0;}

2) new是一个操作符,而malloc()是一个函数。

3) new返回抽象数据类型,而malloc()返回指针void *。

2.free() vs delete

在C++中,delete操作符仅能用于一个使用new操作符分配的内存指针,或者一个NULL指针。而free()仅用于一个使用malloc()分配的内存指针,或者一个NULL指针。

换言之,它们不能混合使用。

#include
#include
int main(){ int x; int *ptr1 = &x; int *ptr2 = (int *)malloc(sizeof(int)); int *ptr3 = new int; int *ptr4 = NULL; delete ptr1; //非法使用delete, 因为ptr1所指向的内存分配在栈上 delete ptr2; //非法使用delete, 因为ptr2所指向的内存使用malloc()分配,而不是new //下面两个是正确使用delete的case delete ptr3; delete ptr4; return 0;}

编译可以通过。但运行的时候会发生异常。

转载地址:http://zqeji.baihongyu.com/

你可能感兴趣的文章
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>
ssh 如何方便的切换到其他节点??
查看>>
JSP中文乱码总结
查看>>
Java-IO-File类
查看>>
Java-IO-java的IO流
查看>>
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java大数据:Hbase分布式存储入门
查看>>
Java大数据:全文搜索引擎Elasticsearch入门
查看>>
大数据学习:Hadoop入门学习书单
查看>>
大数据学习:Spark SQL入门简介
查看>>
大数据学习:Spark RDD操作入门
查看>>
大数据框架:Spark 生态实时流计算
查看>>
大数据入门:Hive和Hbase区别对比
查看>>