当前位置: 首页 > news >正文

【C/C++】malloc 或者 new 动态分配内存

1. malloc 是一个在 C 语言中用于动态分配内存的函数。

通过 malloc 函数,我们可以在程序运行时请求一定大小的内存块,然后将该内存块用于存储数据。

malloc 函数的声明如下:

void* malloc(size_t size);

它接受一个参数 size,表示请求的内存块的字节数。函数返回一个 void* 类型的指针,指向分配的内存块的起始地址。

下面是 malloc 函数的基本用法示例:

#include <stdlib.h>int main() {int* ptr = (int*)malloc(sizeof(int));if (ptr != NULL) {*ptr = 42;free(ptr);  // 使用完内存后需要手动释放}return 0;
}

在这个示例中,我们首先使用 malloc(sizeof(int)) 分配了一个能容纳一个整数的内存块。sizeof(int) 用于获取一个整数类型的字节数,以确保分配的内存块足够容纳一个整数。由于 malloc 返回的是一个 void* 类型的指针,我们将其强制转换为 int* 类型的指针,以便能够正确操作内存块。

接下来,我们通过 if (ptr != NULL) 来检查分配内存是否成功。malloc 在分配内存失败时会返回 NULL,因此我们需要进行这个检查以确保分配成功。

在使用完分配的内存后,我们需要调用 free 函数来手动释放内存。这是非常重要的,因为动态分配的内存不会在作用域结束时自动释放,必须显式地调用 free 来释放它,以避免内存泄漏。

需要注意的是,malloc 分配的内存是未初始化的,它的值是不确定的。如果需要初始化内存,可以使用 calloc 函数来代替 malloc。此外,如果需要重新分配已经分配的内存块的大小,可以使用 realloc 函数。

2. 在 C++ 中,可以使用 malloc 来分配内存空间,但更常见的做法是使用 new 运算符。

C++ 提供了 newdelete 运算符来进行动态内存分配和释放,相比于 mallocfree,它们更适用于 C++ 对象的创建和销毁。

下面是 new 运算符的基本用法示例:

#include <iostream>int main() {int* ptr = new int;if (ptr != nullptr) {*ptr = 42;delete ptr;  // 使用完内存后需要手动释放}return 0;
}

在这个示例中,我们使用 new int 分配了一个能容纳一个整数的内存空间,并将返回的指针赋值给 ptr。与 malloc 不同,new 运算符返回的是一个与所分配类型相匹配的指针,无需进行类型转换。

类似地,我们可以使用 new 运算符来分配更复杂的类型,例如类对象:

#include <iostream>class MyClass {
public:MyClass() {std::cout << "Constructor called!" << std::endl;}~MyClass() {std::cout << "Destructor called!" << std::endl;}
};int main() {MyClass* obj = new MyClass;delete obj;  // 使用完对象后需要手动释放return 0;
}

在这个示例中,我们定义了一个名为 MyClass 的类,该类具有构造函数和析构函数。使用 new MyClass 分配了一个 MyClass 类型的对象,并将返回的指针赋值给 obj。当调用 delete obj 时,析构函数会被调用来释放对象占用的内存。

需要注意的是,C++ 中的 newdelete 是成对使用的,分配和释放的方式必须匹配。不要混用 mallocnew 进行内存分配和释放,也不要混用 freedelete。这是因为 mallocfree 是 C 语言的库函数,无法调用对象的构造函数和析构函数,而 newdelete 是 C++ 运算符,能够正确地管理对象的生命周期。

总结起来,C++ 中可以使用 new 运算符来进行动态内存分配,更适用于 C++ 对象的创建。使用 delete 运算符来手动释放动态分配的内存空间,确保正确释放资源。

相关文章:

【C/C++】malloc 或者 new 动态分配内存

1. malloc 是一个在 C 语言中用于动态分配内存的函数。 通过 malloc 函数&#xff0c;我们可以在程序运行时请求一定大小的内存块&#xff0c;然后将该内存块用于存储数据。 malloc 函数的声明如下&#xff1a; void* malloc(size_t size);它接受一个参数 size&#xff0c;表…...

如果让你重新开始学 C/C++,你的学习路线会是怎么选择?

1. 第一阶段 学好 C 语言和 Linux 1.1 学好 C 语言 无论你是科班还是非科班&#xff0c;建议你一定要学好 C 语言&#xff0c;它应该作为你必须掌握好的语言。你要熟悉 C 语言的基本语法&#xff0c;包括&#xff1a; 顺序、条件、循环三大控制语句 C 中几大基元数据类型的用…...

PCL安装与使用

1 apt安装 ubuntu20.04及以上版本下可以直接通过apt方式安装pcl编译好的二进制文件,二进制安装的版本为1.10。 sudo apt update sudo apt install libpcl-dev 2 源码安装 在pcl的github上下载对应的版本进行安装&#xff1a; https://github.com/PointCloudLibrary/pcl/rel…...

力扣刷题-二叉树-对称二叉树

101 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 思路 我的思路…...

常见面试题-计算机网络相关

1.OSI 七层模型&#xff1f; OSI 七层模型&#xff1a;应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP 五层模型&#xff1a;应用层、传输层、网络层、链路层、物理层 应用层 应用层是由网络应用程序使用的&#xff0c;是离用户最近的一层 应用层通过…...

leetcode做题笔记231. 2 的幂

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…...

AI主播“败走”双11,想用AI省成本的商家醒醒吧,程序员不必担心失业,发展空间依旧很大

目录 1 2 3 “AI人”并不算是新鲜事&#xff0c;随着AI的发展&#xff0c;AI主播也开始悄悄进入到直播间中。 持续无间断的直播、比人工费便宜等优势&#xff0c;让很多商家选择了AI主播。 AI主播到底好不好用&#xff1f;终于在今年“双11”现出了原形。 1 AI主播没火过半年…...

◢Django 自写分页与使用

目录 1、设置分页样式,并展示到浏览器 2、模拟页码 3、生成分页 4、数据显示 5、上一页下一页 6、数据库的数据分页 7、封装分页 8、使用封装好的分页 建立好app后&#xff0c;设置路径path(in2/,views.in2)&#xff0c;视图def in2(request): &#xff0c;HTML: in2.html…...

某城高速综合管控大数据大屏可视化【可视化项目案例-04】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…...

如何在Linux下进行文件查看

cat 文本内容显示到终端 head 查看文件开头 tail 查看文件结尾 常用参数 -f 文件内容更新后&#xff0c;显示信息同步更新 wc 统计文件内容信息...

OSG练习:模仿Ventsim制作三维矿井智能通风系统

1、效果 2、计划内容 1) 三维场景的加载显示;已实现 2)矿井巷道建模及纹理;已实现 3)矿井基础数据采集及修正;已实现 4)通风网络解算算法;已实现 5)通风设备及设施模型制作;未实现 6)风流模拟效果 ;进行中 7)火灾模拟效果;未实现 8)巷道属性查看栏;未实现 9)…...

【数据结构】非递归实现二叉树的前 + 中 + 后 + 层序遍历(听说面试会考?)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…...

32 Feign性能优化

2.3.Feign使用优化 Feign底层发起http请求&#xff0c;依赖于其它的框架。其底层客户端实现包括&#xff1a; •URLConnection&#xff1a;默认实现&#xff0c;不支持连接池 •Apache HttpClient &#xff1a;支持连接池 •OKHttp&#xff1a;支持连接池 因此提高Feign的…...

星岛专栏|从Web3发展看金融与科技的融合之道

11月起&#xff0c;欧科云链与香港主流媒体星岛集团开设Web3.0安全技术专栏&#xff0c;该专栏主要面向香港从业者、交易机构、监管机构输出专业性的安全合规建议&#xff0c;旨在促进香港Web3.0行业向安全与合规发展。 出品&#xff5c;欧科云链研究院 自2016年首届香港金融…...

什么是网络爬虫?

网络爬虫是一种自动化程序&#xff0c;可以自动地浏览网站并从网站上抽取数据。APP数据抓取实际上也是运用了网络爬虫的技术&#xff0c;只不过抓取的对象不是网站上的信息&#xff0c;而是手机APP上的数据。下面详细介绍APP数据抓取的过程。 1、确定数据需求 首先需要明确要抓…...

酷柚易汛ERP - 商品库存余额表操作指南

1、应用场景 商品库存余额表用于查询商品在各仓库的实际结存量、单位成本以及成本等明细。 2、主要操作 打开【仓库】-【商品库存余额表】&#xff0c;可筛选仓库、商品、商品类别&#xff0c;导出/打印等操作见【销货单】不再赘述。 3、分享操作 库存余额分享&#xff0c;…...

第27期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…...

大数据-玩转数据-Flume

一、Flume简介 Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集、聚集、移动的服务,Flume只能在Unix环境下运行。Flume基于流式架构,容错性强,也很灵活简单。Flume、Kafka用来实时进行数据收集,Spark、Flink用来实时处理数据,impala用来实时查询。二、Flume…...

【Linux】进程概念IV 进程地址空间

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0. 数据在内存中的分布1. 虚拟地址与真实物理地址2. 进程地址空间2.1 进程地址空间概念2.2 进程->页表->内存 0. 数据在内…...

Flink在汽车行业的应用【面试加分系列】

很多同学问我为什么要发这些大数据前沿汇报&#xff1f; 一方面是自己学习完后觉得非常好&#xff0c;然后总结发出来方便大家阅读&#xff1b;另外一方面&#xff0c;看这些汇报对你的面试帮助会很大&#xff0c;特别是面试前可以看看即将面试公司在大数据前沿的发展动向&…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...