C语言的内存分配:malloc和free

使用库函数分配和管理内存。在运行时,分配更多的内存给程序使用,主要工具是malloc函数,这个函数接受一个参数:所需要要的内存字节数。malloc函数会找到合适的空闲内存块,这样的内存是匿名的,即malloc分配了内存后,不会为其赋名,返回动态分配内存块的首字节地址,我们可以将这个地址赋给一个指针变量,使用这个指针访问这块内存。

malloc函数的返回类型通常被定义为指向char的指针。从ANSI C标准开始,C使用一个新的类型:指向void的指针,该类型相当于一个通用指针。malloc可用于返回指向数组的指针、指向结构体指针等,所以通常该函数的返回值会被强制转换为匹配的类型。在ANSI C中,我们应该坚持使用强制类型转换,因为这样可以提高代码的可读性,否则,我们就不容易记住这个指针所指向的实际类型,这样的阅读性就大打折扣。把指针void的指针赋给任意类型的指针完全不用考虑类型匹配的问题。如果malloc申请内存分配失败,会返回空指针。

double* ptd;
ptd = (double*)malloc(30*sizeof(double));

声明数组有三种方式:

- 声明数组时,用常量表达式表示数组的维度,用数组名访问数组的元素。可以用静态内存成功动态创建这种数组。

- 声明变长数组时,用变量表达式表示数组的维度,用数组名访问数组元素,这种数组只能在自动内存中创建。

- 声明一个指针,调用malloc函数,将其返回值赋给指针,使用指针访问数组元素,该指针可以是自动或静态的。

动态分配内存的存储期从调用malloc函数分配内存到调用free函数释放内存为止。malloc函数要和free函数一起使用,free函数的参数是malloc返回的指针,free用于释放之前malloc申请的内存。

静态内存的数量在编译时固定的。在程序运行期间也不会改变。自动变量使用的内存数量在程序执行期间自动增加或减少。但动态分配的内存数量只会增加,除非调用free来进行释放。

分配内存还可用使用calloc函数:

double* buf;
buf = (double*)calloc(100,sizeof(double));

和malloc函数一样, 在ANSI C之前,calloc函数也返回指向char的指针,在ANSI C之后,返回指向void的指针。如果存储不同的类型,应使用强制类型转换运算符。calloc接受两个参数,一个是所需要的存储单元的数量,第二个参数为存储单元的大小(以字节为单位)。

calloc函数有一个特点,会把块中的所位位置都设置为0.calloc函数也需要要用free函数来释放分配的内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地安装 Grafana Loki

本地安装 Grafana Loki 一、 安装 Loki1. 下载 Loki2. 创建 Loki 配置文件3. 创建 Loki 服务 二、安装 Promtail1. 下载 Promtail2. 创建 Promtail 配置文件3. 创建 Promtail 服务 三、 安装 Grafana四、启动所有服务五、添加loki 数据源1. 添加仪表板2. 日志查询面板 json 参考…

趣味数学300题1981版-十五个正方形

分析:移动两根变成11个正方形很简单: 移动4根变成15个正方形,分析: 一个田字格包含5个正方形,若要15个正方形需要3个田字格,如果3个田字格完全不重合,需要6*318根火柴。如果合并正方形的边&…

IDEA——Mac版快捷键

目录 按键含义常用组合代码生成快捷键:代码追踪快捷键:高效编辑快捷键:代码重构快捷键:工具类快捷键:常规文件操作快捷键: 按键含义 ⌘ command Command键(⌘)相当于Windows中的Con…

基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Prompt:创造性的系统分析者

分享的提示词: 你是一个创造性的系统分析者,作为咨询师,你具有以下特质: 基础能力: 深入理解我的系统性模式 识别模式间的隐藏联系 发现出人意料的关联 提供令人惊讶的洞见 工作方式: 在每次回应中至少…

Andorid 学习 Compose UI(1):Box

今天学习和实验一下Android 的compose UI,写一些很小的Demo实验。下面和css 布局有点相似性。 如Box 看起来像html 当中的 div ,compose UI 提供Modifier 很多设置。你会发现Text,Box,Row,Image等组件 都有这个属性。我们处理任务包括对齐布局&#xff0…

Selenium实战案例1:论文pdf自动下载

在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…

《炒股养家心法.pdf》 kimi总结

《炒股养家心法.pdf》这篇文章详细阐述了一位超级游资炒股养家的心得与技巧,展示了其从40万到10亿的股市传奇。以下是文章中炒股技巧和心得的详细总结: 1.核心理念 市场情绪的理解:炒股养家强调,股市的本质是群体博弈&#xff0c…

2025年华为手机解锁BL的方法

注:本文是我用老机型测试的,新机型可能不适用 背景 华为官方已经在2018年关闭了申请BL解锁码的通道,所以华为手机已经无法通过官方获取解锁码。最近翻出了一部家里的老手机华为畅玩5X,想着能不能刷个系统玩玩,但是卡…

Perfectly Clear WorkBench深度解析:专业图像处理软件的高效应用

在图像处理领域,面对照片曝光不足、色彩失真、细节模糊等常见问题,一款专业且高效的图像处理软件显得尤为重要。今天,本文将为大家详细介绍Perfectly Clear WorkBench这款图像处理软件,帮助大家更好地了解并应用其功能,提升照片质量。 一、智能图像校正,解决常见问题 Pe…

使用 DistilBERT 进行资源高效的自然语言处理

DistilBERT 是 BERT 的一个更小、更快的版本,在减少资源消耗的同时仍能保持良好性能。对于计算能力和内存受限的环境来说,它是一个理想的选择。 在自然语言处理(NLP)中,像 BERT 这样的模型提供了高精度和出色的性能。然…

【后端基础】布隆过滤器原理

文章目录 一、Bloom Filter(布隆过滤器)概述1. Bloom Filter 的特点2. Bloom Filter 的工作原理 二、示例1. 添加与查询2. 假阳性 三、Bloom Filter 的操作1、假阳性概率2、空间效率3、哈希函数的选择 四、应用 Bloom Filter 是一种非常高效的概率型数据…

Pytorch实现论文之三元DCGAN生成RGB图像用于红外图像着色生成

简介 简介:采用了三次DCGAN单独生成单通道图像之后进行组成RGB图像放入鉴别器中检测,并在鉴别器和生成器的损失训练中采用梯度方法来提升或者降低权重。该方法将用于获得红外图像着色的生成。 论文题目:Infrared Image Colorization based on a Triplet DCGAN Architectur…

Qt中QDockWidget的使用方式

在PyQt5中使用QDockWidget可以创建灵活的停靠窗口,增强应用程序的多功能性。以下是详细的步骤和示例代码: 基本步骤 导入模块:确保导入必要的PyQt5模块。创建主窗口:继承QMainWindow并初始化界面。设置中心部件:例如…

docker独立部署milvus向量数据库

milvus镜像:国外封锁,国内源也不好用。基本上所有源都不能用 首先想到阿里云服务,但是阿里云国外服务器便宜的300~400呢。 基于成本考虑终于装上心心念念的milvus(*^▽^*) 安装 Milvus 安装 Milvus 独立版 wget https://raw.githubuserco…

【SpringBoot整合系列】HttpClient远程访问的示例

前言 使用Apache的HttpClient库,添加Apache HttpClient的依赖。工具类的封装。通常,工具类需要处理GET、POST请求,可能还有其他方法如PUT、DELETE。需要设计一个工具类,提供静态方法,可以发送请求,并处理响…

Git操作整体流程

文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/,登录个人账号,右上角加号…

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…

如何查看java的字节码文件?javap?能用IDEA吗?

编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境:Ubuntu-18.04.5编译版本:android13-release下载地址:清华大学开源软件镜像站AOSP # 下载repo # 同步代码:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…