malloc函数与free函数

news2024/9/21 4:24:09

目录

开头

大家好,我叫这是我58。今天,我们来学一下如何把数组初始化时的项数变成变量的一些知识。

1.怎样把数组初始化时的项数变成变量?

其实,要解决这个问题,只需要把数组的内存动态化就可以了,而在以前,我们是这样定义数组的:int arr[10],或者是int* arr[10],但是,这样的数组只是静态的,根本不能灵活地改变自身的大小,而现在,只要malloc函数申请动态内存,并且用free函数释放动态内存,就可以把数组初始化时的项数变成你想要的变量了。那么,malloc函数和free函数具体是怎么样的呢?想知道的话就看一下下面的内容吧。

malloc函数

malloc函数,来自于stdlib.hmalloc.h1这两个头文件中,这个函数是这样构造的:void* malloc (size_t size);2,而这个函数的作用就是申请一块大小为size字节的内存,并且也返回了这块内存的开头的类型为void *的指针,但是,这个函数申请之后的这块内存却是并没有初始化的,就好比你刚租的房子并没有装修过似的,因此,必须要把这个函数的返回值赋给的指针初始化为你想要的数,也就相当于装修了一下你刚租的房子,这样,才能使这个指针指向的东西没有问题,也就是说,在把你刚租的房子装修好之后,就不容易出现瑕疵了,如果size0,就会使这个函数的返回值由特定的库实现(它可能是也可能不是空指针),但返回的指针不应被解引用2,也不应该用free函数来释放这块空内存。而如果size是一个一个一个一个一个一个非常的数字(如类型为size_t-1(4294967295)),就会返回NULL,因为要申请的大小超出了整个动态内存的大小,而且程序又对指向NULL的指针解引用了一下,所以就爆出了一个这样的错误:(注:ipNULL)。并且,malloc函数的返回值的类型void*可以被转换为所需类型的数据指针,以便可以取消引用。而接下来,我们就要讲一下free函数了。

free函数

free函数,来自于stdlib.h这个头文件,用来把申请之后的动态内存还给操作系统,以此来用于进一步的分配.free函数的内部构造是这样的:void free (void* ptr);3,如果free函数的参数不是一个动态内存,并且还不是一个空指针,那么就会出错,而如果free函数的参数为NULL,就不会执行任何的操作,并且,这个函数只是用来把申请之后的动态内存还给操作系统,并不会改变里面的值,因此,在使用完free函数之后,还要再主动把那块动态内存指向的指针设为NULL(也可以是你想要的地址)。在基本讲完这一篇博客所用到的函数——malloc函数和free函数之后,接下来就要讲一下malloc函数与free函数的实际运用了。

2.malloc函数与free函数的实际运用

CC6 牛牛的排序

#include <stdio.h>
#include <stdlib.h>

int intcmp(const void* vp, const void* vpa) {
    return *(int*)vp - *(int*)vpa;
}
void sort(int* array, int n)  {
    qsort(array, n, 4, intcmp);
}
int main() {
    int i = 0;
    int ia = 0;
    scanf("%d", &i);
    int* arrp = (int*)malloc(4 * i);
    for (ia = 0; ia < i; ia++) {
        scanf("%d", &arrp[ia]);
    }
    sort(arrp, i);
    for (ia = 0; ia < i; ia++) {
        printf("%d ", arrp[ia]);
    }
    free(arrp);
    return 0;
}

随机乱码打印

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
int main() {
	srand((size_t)time(NULL));
	int i = 0;
	int ia = 0;
	scanf("%d", &i);
	char* strp = malloc(i);
	for (; ia < i; ia++) {
		strp[ia] = rand() % 127;
	}
	printf("%s", strp);
	free(strp);
	return 0;
}

随机数组打印

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
int main() {
	srand((size_t)time(NULL));
	int i = 0;
	int ia = 0;
	scanf("%d", &i);
	int* arrp = malloc(4 * i);
	for (; ia < i; ia++) {
		arrp[ia] = rand();
	}
	for (ia = 0; ia < i; ia++) {
		printf("%d ", arrp[ia]);
	}
	free(arrp);
	return 0;
}

结尾

在你看到这之后,可以评论来互动一下我哦。


  1. 选自tyustli的其中一篇博客——《C语言——malloc函数详解》 ↩︎

  2. 选自C语言中malloc函数的简介 ↩︎ ↩︎

  3. 选自C语言中free函数的简介 ↩︎

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

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

相关文章

【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】

学习Git版本控制系统心得体会 摘要 通过参与InternLM Git教程&#xff0c;我对Git这一开源的分布式版本控制系统有了更深入的理解和实践。Git以其高效的团队协作能力、详尽的代码历史记录以及灵活的分支管理功能&#xff0c;成为软件开发中不可或缺的工具。 文章大纲 Git简介…

自查出癌症后 凯特王妃的生活观发生了变化 王室的粉丝们也应该会很少见到她

凯特米德尔顿今年的健康问题令人意外,这也改变了王室的面貌。这位威尔士王妃每次露面都引来巨大关注,因此王室不得不发挥创意,将更多精力放在威廉王子、索菲、爱丁堡公爵夫人,甚至查理三世国王的社交日程上。王室粉丝们可能期待着凯特恢复健康,恢复正常日程,但内部人士称…

unity 粒子系统学习

差不多了解了基本的ui面板&#xff0c;学一下粒子系统 取消轮廓线 这样粒子biubiu的时候就没有橙黄色的轮廓线了

lvs的dr模式实现

目录 一、实验环境准备 1、五台红帽9系统的主机 2、关闭所有的防火墙以及关闭selinux 二、在lvs中配置 1、在lvs中安装lvs软件并设置开机启动 2、在lvs中打开内核路由功能&#xff0c;并把它写入/etc/sysctl.conf文件中 3、webserver1和webserver2下载httpd 4、在lvs主机…

【Redis进阶】Redis单线程模型和多线程模型

目录 单线程 为什么Redis是单线程 处文件事件理器的结构 文件处理器的工作流程 总结 文件事件处理器 连接应答处理器 命令请求处理器 命令回复处理器 多线程 为什么引入多线程 多线程架构 多线程执行流程 关于Redis的问题 Redis为什么采用单线程模型 Redis为什…

【STM32】USART串口和I2C通信

个人主页~ USART串口和I2C通信 USART串口一、串口1、简介2、电路要求3、参数及时序 二、USART外设1、USART结构2、波特率发生器 三、数据包1、HEX数据包HEX数据包接收 2、文本数据包文本数据包接收 I2C通信一、简介二、通信协议1、硬件电路2、I2C时序基本单元 三、I2C外设1、简…

Chapter 29 类型注解

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、变量的类型注解二、函数的类型注解三、Union类型注解 前言 类型注解为我们提供了一种清晰的方式来描述变量和函数的预期类型&#xff0c;使得代码的意图更加明确。…

GMMREG:基于高斯混合模型的鲁棒点集配准

其关键思想都是用连续密度函数表示离散点集&#xff0c;即高斯混合模型。不同点在于本节算法采用L2距离来衡量两个点云之间的相似性&#xff0c;而5.7节中的NDT算法采用的是作者定义的匹配势来衡量&#xff0c;实际上是所有线段对之间的差异。并且本节算法中加入了薄板样条插值…

打造分布式缓存组件【场景】

本文将采用AOP 反射 Redis自定义缓存标签&#xff0c;重构缓存代码&#xff0c;打造基础架构分布式缓存组件 配置 需要在Redis配置类中开启AOP自动代理&#xff0c;即通过EnableAspectJAutoProxy 注解实现该功能 import com.fasterxml.jackson.annotation.JsonAutoDetect; …

「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)

概述 对于一张单向链表&#xff0c;我们总是使用双指针实现一些算法逻辑&#xff0c;这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。 所谓原地算法&#xff0c;是指不使用额外空间的算法。 现在&#xff0c;我们利用双指针实现以下四种行为。 //Definition fo…

Linux驱动.之I2C,iic驱动层(二)

一、 Linux下IIC驱动架构 本篇只分析&#xff0c;一个整体框架。 1、首先说说&#xff0c;单片机&#xff0c;的i2c硬件接口图&#xff0c;一个i2c接口&#xff0c;通过sda和scl总线&#xff0c;外接了多个设备device&#xff0c;通过单片机&#xff0c;来控制i2c的信号发生&…

VUE和Element Plus

1.VUE 1.下载和配置环境 使用vue编程&#xff0c;我们需要使用到的编程软件是vs code&#xff0c;还需要使用node.js&#xff0c;这个的作用就类似于JDK&#xff0c;当我们都下载好之后&#xff0c;winR键打开命令提示符&#xff0c;我们在这里可以查看版本&#xff0c; npm…

《计算机网络 - 自顶向下方法》阅读笔记

《计算机网络 - 自顶向下方法》阅读笔记 应用层、运输层、网络层、数据链路层 计算机网络和因特网&#xff1a; 因特网&#xff1a; ​ 是一个世界范围的计算机网络&#xff0c;互联了全世界的计算机设备 计算机设备&#xff1a;手机&#xff0c;电脑&#xff0c;游戏机&#…

MATLAB数据可视化:在地图上画京沪线的城市连线

matlab自带的geoplot(lat,lon) 可以在地理坐标中绘制线条。使用 lat和lon分别指定以度为单位的经度和纬度坐标。 绘制京沪线所经城市线条&#xff1a; citys [116.350009,39.853928; 116.683546,39.538304; 117.201509,39.085318; 116.838715,38.304676;...116.359244,37.436…

Java网络编程——HTTP协议原理

协议 我们在网上冲浪时&#xff0c;会在浏览器地址栏输入一个网址&#xff0c;然后就能打开网页了。比如&#xff0c;输入 https://www.douban.com/就可以访问到豆瓣的主页&#xff1a; 那么大家是否好奇&#xff1a;https 是什么意思&#xff0c;作用又是什么呢&#xff1f;…

语言模型简介和Ngram模型(1)

语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…

unity 创建项目报错feature has expired (H0041),sentinel key not found (H0007)

两个报错同一种处理方式。 1、删除以下路径所有文件&#xff1a;C:\ProgramData\SafeNet Sentinel&#xff08;注意&#xff1a;ProgramData为隐藏文件&#xff09; 2、打开Cmd&#xff08;WinR键&#xff0c;输入cmd回车&#xff09;&#xff0c;进入Unity安装所在盘符&#…

SecureCRT记录会话日志

在使用SecureCRT软件的时候&#xff0c;有个非常实用的功能&#xff1a;记录会话日志&#xff0c;就是可以把当前会话的所有记录保存成文本文件。下面简单介绍一下如何使用这个功能。 首先点击SecureCRT软件左上角的文件 然后点击会话日志即可 然后选择一个路径保存日志&#…

物流仓库安全视频智能管理方案:构建全方位、高效能的防护体系

一、背景分析 随着物流行业的快速发展和仓储需求的日益增长&#xff0c;仓库安全成为企业运营中不可忽视的重要环节。传统的人工监控方式不仅效率低下&#xff0c;且难以做到全天候、无死角覆盖&#xff0c;给仓库资产和人员安全带来潜在风险。因此&#xff0c;引入仓库安全视…

Datawhale AI夏令营第四期 魔搭-AIGC方向 task01笔记

目录 赛题内容 可图Kolors-LoRA风格故事挑战赛 baseline要点讲解(请配合Datawhale速通教程食用) Step1 设置算例及比赛账号的报名和授权 Step2 进行赛事报名并创建PAI实例 Step3 执行baseline Step4 进行赛题提交 微调结果上传魔搭 lora 调参参数介绍及 SD 的基础知识点…