【C++】C语言的malloc/free和C++的new/delete的异同
C++的堆内存管理
1、C++中专门管理堆内存的语句,而C语言中只能使用标准库的函数来管理堆内存。
new 分配内存,相当于C语言中的malloc
delete 释放内存,相当于C语言中的free
2、new和delete的使用方法
类型* p = new 类型; // 分配一块内存
注意:new会自动计算字节数,且返回的是有类型的地址。
delete p; // 释放内存
类型* p = new 类型[n]; // 分配n块连续的内存
delete[] p; // 释放n块连续的内存
注意:new/delete 和new[]/delete[] 不能混用。
3、new/new[]分配内存时可以对内存进行初始化。
int* p = new int(12345);
int* p = new int[5]{0,1,2,3,4}; // -std=gnu++11 大华 海康 同花顺 恒生电子 潮流 炎魂 涂鸦
4、new/delete不能与malloc/free混用
因为new和delete会自动调用结构、联合、类的构造和析构函数,而malloc不会,如果混用会造成析构和构造的不匹配,可能会引起段错误或内存泄露。
new[n] 会自动调用n次构造函数
delete[] 会自动调用n次析构函数,原因是C++编译器会在所申请到内存的前4个字节记录,内存块数。
5、new/delete的特殊情况
new分配内存失败时,不会返回空指针,而是产生std::bad_alloc异常。
delete 可以释放空地址,但不能重复释放同一块内存,否则会产生 double free or corruption的错误。
6、new/malloc的参数与返回值
new 需要的参数是类型,带类型的地址。
malloc 需要的参数是字节数,void*类型的地址。
C语言中的malloc/free与C++中的new和delete的相同点和不同点。
不同点:身份:运算符/关键字 C标准库函数返回值:带类型的地址 void*参数:类型 字节数失败:抛异常 返回NULL构造/析构:自动调用 不调用初始化:可以 不可以头文件:不需要 stdlib.h相同点:都可以管理堆内存返回值都是地址都可以释放空指针都不可以重复释放
【C++】C语言的malloc/free和C++的new/delete的异同相关推荐
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- Linux倒序赋值用molloc函数,请教一个C语言函数malloc的问题
halazi100 于 2014-11-27 16:24:42发表: malloc和free的原理 一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *mal ...
- malloc,free,new,delete解析(原)
使用C/C++的苦逼娃们经常深陷内存越界错误,资源泄漏错误等等问题,而且这样的惨剧每时每刻都在这个世界上重复的发生着.其实,我也是苦逼娃!也为了个神马越界的东西debug了整个下午过,为此也想砸电脑过 ...
- 动态内存管理:malloc和free以及new和delete的联系与区别
动态内存管理:malloc和free以及new和delete的联系与区别 文章目录 动态内存管理:malloc和free以及new和delete的联系与区别 一. C/C++中程序内存区域划分: 二. ...
- 有了malloc/free,为什么还要new/delete?
有了malloc/free,为什么还要new/delete malloc与free是C/C++的标准库函数,new/delete是C++的运算符. 对于非内部数据类型的对象而言,光用malloc/fr ...
- c语言动态申请函数,C语言用malloc函数申请二维动态数组
C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { char * p=(char *)malloc(siz ...
- C语言 利用malloc()和realloc()动态分配内存
1. C语言定义1个数组的时候, 必须同时指定它的长度. 例如: int a[5]={1,2,3,4,5}; //合法 int b[6]; //合法int c[]; //错误 因为没有指定长度 但是下 ...
- C语言之malloc和free总结
1.内存分配和函数介绍 内存分配:指在程序执行的过程空间中或者回收存储空间 ,内存分配分为静态内存分配和动态内存分配 ,要实现动态内存分配,就需要有执行这个操作的对象.C语言提供的两个标准库函数: ...
- c语言:malloc函数的简介
文章目录 一.为什么需要malloc函数? 二.如何使用malloc函数? 三.用malloc函数自定义数组长度 一.为什么需要malloc函数? 用于解决传统数组以下缺点. ①传统数组的长度必须要事 ...
最新文章
- 使用maxscale数据库中间件解决读负载均衡
- POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索
- jzoj4051-序列统计【NTT】
- 怎么解决相位抵消_【录音教程】如何防止话筒拾音的声学相位抵消
- Ubuntu如何启动Pycharm
- python123测试题_Python练习题
- html语言标示,HTML语言剖析(二) HTML标记一览
- 骑马与砍杀服务器修复,骑马与砍杀21.3.1公共版和热修说明 修复联机模式
- 了解编译原理-笔记小结
- 随机过程知识点学习与总结
- Centos7 日志查看工具journalctl 使用
- f1c100s 源码_GitHub - hcly/f1c100s: f1c100s source code
- 关闭Xshell系统提示音 Tab键 Backspace键
- 新手学Windows XP
- Some weights of the model checkpoint at bert_pretrain were not used when initializing BertModel
- 更新again:微机原理与汇编语言-练习题
- 输入法-电脑输入法快速打出生僻字+运算
- java编程惯用法_java惯用法转载
- uva 1362 区间DP
- python彩蛋_隐藏在Python中的15个彩蛋