动态内存管理函数malloc,calloc,realloc,free

news2024/9/23 15:31:20

malloc

函数原型:void* malloc(size_t size);

  1. 这个函数向内存申请一块连续可用的size大小的空间,并返回指向这快空间的指针。
  2. 如果开辟成功,则返回一个指向开辟好空间的指针。
  3. 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要检查。
  4. 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候决定。
  5. 如果参数size为0,malloc的行为标准是未定义的,取决于编译器。
int main()
{
   int* p = (int*)malloc(40);
   memset(p, 0, 40);   //初始化开辟的内存空间为0
   if (NULL == p)
   {
   	perror("malloc errror");
   	return 1;
   }
   int i = 0;
   for (i = 0; i < 10; i++)
   {
   	*(p + i) = i;
   }
   for (i = 0; i < 10; i++)
   {
   	printf("%d ", *(p + i));
   }
   free(p);
   p = NULL;
   return 0;
}

输出

0 1 2 3 4 5 6 7 8 9

注意:使用malloc分配空间后,要使用free函数释放空间,否则可能会造成内存泄漏。如果没有使用free,当程序退出时,系统会自动回收空间,但是也可能会造成系统退出前,即系统运行期间的内存泄露,所以使用free函数释放不在使用的空间是必要的。

free

函数原型:void free(void* ptr);

  1. free函数是用来释放动态开辟的内存
  2. 如果参数ptr指向的空间不是动态开辟的,那free的行为是未定义的。
  3. 如果参数ptr是NULL指针,则函数什么事都不做。

举个反例,如下:


int main()
{
	int a = 0;
	int* p = &a;
	free(p);   //p不是动态分配,所以此用法不正确
	p = NULL;

	return 0;
}

上述代码执行会报错。

calloc

函数原型:
void* calloc(size_t num, size_t size);

  1. 函数的功能是为num个大小为size的元素开辟一块空间,并把空间初始化为0.
  2. 于malloc的区别只在于calloc会在返回地址之前把申请的每个字节初始化为0.
int main()
{
	int* p = (int*)calloc(10, sizeof(int));
	if (NULL == p)
	{
		perror("calloc error");
		return 1;
	}

	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", *(p + i));
	}
    free(p);
    p = NULL;
	return 0;
}

输出

0 0 0 0 0 0 0 0 0 0

realloc

函数原型:void* realloc(void* ptr, size_t size);

  1. realloc函数的出现让动态内存管理更加灵活。
  2. 有时我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间太大了,那为了合理的使用内存,我们一定会对内存大小进行灵活的调整。而realloc函数就可以做到对动态开辟内存大小的调整。
  3. ptr是要调整的内存指针
  4. size是调整后新的大小
  5. 这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。
  6. realloc调整内存空间存在两种情况:
    情况1: 原有空间之后没有足够大的空间扩容,需要寻找新的内存空间。
    情况2:原有空间之后有足够大的空间进行扩容。
    如下图所示:
    在这里插入图片描述
int main()
{
	int* p = (int*)malloc(40);
	if (NULL == p)
	{
		perror("malloc errror");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		*(p + i) = i + 1;
	}
    
	//扩容
	int* ptr = (int*)realloc(p, 80);
	if (NULL == ptr)
	{
		perror("realloc error");
		return 2;
	}
	p = ptr;

	//使用
	for (i = 0; i < 10; i++)
	{
		printf("%d ", *(p + i));
	}
	free(p);
	p = NULL;
	return 0;
}

输出

1 2 3 4 5 6 7 8 9 10

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

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

相关文章

应用程序编程接口 (API) — 简单解释

Nimrita Koul 博士 https://medium.com/nimritakoul01/application-programming-interface-api-simply-explained-3680d4649121 文章目录 一、说明二、API 的类型二、示例健身应用程序三、可乐自动售货机四、客户端和服务器五、超文本传输协议 &#xff08;HTTP&#xff09;5.1…

逆向中的游戏-入土为安的第二十五天

逆向中的游戏 CE的介绍 Cheat Engine &#xff0c;简称CE&#xff0c;是逆向工程师常用的几大神器之一&#xff0c;也是游戏汉化、破解以及外挂编写中常用的工具&#xff0c;其功能包括&#xff1a;内存扫描、十六进制编辑器、调试工具&#xff0c;可以进行反汇编调试、断点跟…

FaceChain 打造个人证件照 职业照 写真照

一、简介 FaceChain可实现兼具可控性与ID保持能力的无限风格写真与固定模板写真功能&#xff0c;同时对ControlNet和LoRA具有优秀的兼容能力。FaceChain支持在gradio的界面中使用模型训练和推理能力、支持资深开发者使用python脚本进行训练推理&#xff0c;也支持在sd webui中安…

【精选】基于springboot休闲娱乐代理售票系统(源码+定制+开发辅导)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

进销存专业化管理系统,降低采购和销售成本 带完整的安装代码包以及搭建部署教程

系统概述 在当今竞争激烈的市场环境中&#xff0c;企业的运营效率与成本控制直接关联到其生存与发展。特别是对于中小企业而言&#xff0c;如何高效地管理进销存流程&#xff0c;减少不必要的开支&#xff0c;成为了提升竞争力的关键。为此&#xff0c;我们精心打造了一款“进…

推荐一个能在博客中运行代码的平台

博客中粘贴代码&#xff0c;这是很常见的做法了。如果我们博客中的代码可以直接运行&#xff0c;是不是很酷呢&#xff1f; 来看看&#xff1a; https://andi.cn/page/621698.html 推荐一个平台&#xff0c;有以下功能&#xff1a; 博客中的代码可以直接运行、一键复制可以…

【Resoved】编译 OpenCV 4.5.5 源码,fatal error: mpi.h: No such file or directory

0. 背景 Ubuntu20.04 OpenCV 4.5.5 Anaconda ROS2 foxy 等 1. 问题描述 编译 OpenCV4.5.5源码,make -j10 时,报错: 2. 问题分析 这个错误表明在编译 OpenCV 的 HDF5 模块时,尽管你在 CMake 中指定了 MPI 的路径,但编译器仍然无法找到 mpi.h 文件。或者 HDF5 没有正确地…

【STM32】MDK安装

1 MDK 历史背景 Keil公司是一家业界领先的微控制器&#xff08;MCU&#xff09;软件开发工具的独立供应商。Keil公司由两家私人公司联合运营&#xff0c;分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公司制造和销售种类广泛的开发工具&am…

神经网络动画讲解 - 构建灵活可调节参数

神经网络核心思想 神经网络核心思想&#xff1a;&#xff08;1&#xff09;机器学习、深度学习是一种方法论 机器学习&#xff1a; 核心思想是使计算机系统能够从经验&#xff08;通常是大量数据&#xff09;中学习和改进&#xff0c;以优化性能并做出准确的预测或决策&#…

827 leetcode +网络

01背包问题的衍生题目&#xff1a; 对于01背包问题&#xff0c;只需要明白四件事&#xff0c;1重量是啥&#xff0c;2value是啥&#xff0c;3优化目标是啥&#xff0c;4约束目标是啥。 这个题目里面重量是:0,1,4,9,16。。。。 value&#xff1a;1&#xff0c;1&#xff0c;1&…

72 华为资源库

1 报文格式 https://info.support.huawei.com/info-finder/tool/zh/enterprise/packetformat 2 华为IP网络电子书 资源可以下载 https://e.huawei.com/cn/topic/enterprise-network/ip-ebook 3 华为产品文档 https://support.huawei.com/enterprise/zh/doc/index.html 4 华为…

访问者模式详解

访问者模式 简介: 类的内部结构不变的情况下&#xff0c;不同的访问者访问这个对象都会呈现出不同的处理方式。 人话: 其实就是为了解决类结构不变但操作处理逻辑易变的问题&#xff0c;把对数据的操作都封装到访问者类中&#xff0c; 我们只需要调用不同的访问者&#xff0c;…

前端算法 === 力扣 111 二叉树的最小深度

目录 问题描述 DFS&#xff08;深度优先搜索&#xff09;方案 BFS&#xff08;广度优先搜索&#xff09;方案 总结 力扣&#xff08;LeetCode&#xff09;上的题目111是关于二叉树的最小深度问题。这个问题可以通过深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&…

Start OpenAI gym on arbitrary initial state

题意&#xff1a;“在任意初始状态下启动 OpenAI Gym” 问题背景&#xff1a; Anybody knows any OpenAI Gym environments where we can set the initial state of the game? For example, I found the MountainCarContinuous-v0 can do such thing so that we can select a…

游戏+AI

我们来聊聊AI【作者声明&#xff0c;个人观点&#xff0c;欢迎友好讨论】 我想这也是很多目前为止很多投资者对于AI举旗不定&#xff0c;不敢投资&#xff0c;业内游戏行业目前正式商用产品也是寥寥无几。 AI全称Artificial Intelligence&#xff0c;中文译名人工智能。人类从工…

信息打点-Web架构篇域名语言中间件数据库系统源码获取

知识点&#xff1a; 1、打点-Web架构-语言&中间件&数据库&系统等 2、打点-Web源码-CMS开源&闭源售卖&自主研发等 CMS&#xff1a;网站程序源码是可以通过搜索引擎搜索到并且下载的&#xff1b; 闭源售卖&#xff1a;不是一个开源的&#xff0c;要么从内…

【网络安全】分析重置密码功能实现账户接管

未经许可,不得转载。 文章目录 正文正文 目标为“target.com”,我执行了一些正常操作,比如创建或删除某些内容来保存 API 请求,然后检查是否存在任何 idor 或访问控制错误。然而,我没发现漏洞。 接着,我读取 JavaScript 文件来检查是否存在任何敏感信息,但一无所获。 …

浅谈 @Transtational 原理 及其失效场景(1)

上篇讲述了 当Transtctional遇到Async遇碰撞出怎样的火花&#xff1f; 本篇则主要从Transtational出发仔细谈谈。 一、调用场景复现&#xff0c;代码层面什么情况会失效&#xff1f; 1&#xff09;同类操作&#xff1a;事物A调取非事物B&#xff0c;A报错/B报错&#xff08;事…

流体力学解迷宫

诶&#xff0c;我手机呢&#xff1f;我手机放哪了&#xff1f;我手机是不是落餐厅了&#xff1f;会议室&#xff1f;厕所&#xff1f; 最近脑子有点不好使&#xff0c;可能需要练一练……解解迷宫吧 怕脑子吃不消&#xff0c;从简单的开始&#xff0c;不错&#xff0c;轻松拿…

EEtrade:黄金首饰是不是越软越好

黄金一直以来都是人们喜爱的贵金属之一。许多人在购买黄金首饰时&#xff0c;常常会关注黄金的纯度和硬度。那么&#xff0c;黄金首饰是不是越软越好呢?本文将详细探讨这个问题&#xff0c;并分析黄金首饰的硬度与其使用和美观性的关系。 黄金的纯度与硬度 黄金纯度 黄金的…