动态内存管理(扫盲式讲解)

前言:学好数据结构的三大法宝:指针、结构体、动态内存管理,指针前面讲的已经很细了,大家看完了基本上指针方法是没啥问题的

1 为什么要有动态内存的开辟?

因为动态内存的开辟是在堆区里面的,可以释放,但是栈区的内存空间开辟是死的,无法释放。

2 怎么合理使用动态内存呢?

首先你要学会开辟内存,然后在合适的条件下释放内存

3 动态内存的应用

(1)首先带大家了解动态内存的函数

one:malloc

下面我们来在堆区放一个数组

malloc开辟空间有两种情况

1 开辟失败,返回的就是空指针

2 开辟成功返回一个指向好的空间的地址

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{int arr[10] = { 0 };int* p = &arr;p =(int*)malloc(sizeof(arr)*sizeof(int));//这里要判断一下,空间开辟是否失败,如果失败malloc返回的就是空指针if (p == NULL)return 1;for (int i = 0; i < 10; i++){p[i] = i;printf("%d ", p[i]);}//这里malloc开辟的空间用完了记得释放free(p);//然后把指针p置空p = NULL;return 0;
}

给大家看看调试效果:

变成空指针了

two:calloc

calloc与malloc只有一个区别,返回地址之前会把指针指向的内容全部初始化为0

int main()
{int* p = (int*)calloc(10,sizeof(int));//好习惯是每天养成的,记住一定要判断是否是空指针if (p == NULL)return 1;for (int i = 0; i < 10; i++){printf("%d ", p[i]);}free(p);p = NULL;return 0;
}

three:realloc

realloc的优点是让动态内存的空间管理非常灵活,如果觉得申请的内存空间大了,可以扩容,小了可以缩减。

扩容分为两种情况

(1)原有的空间后面的空间足够大,那么返回的就是原来的地址

(2)原有的空间后面的空间不够了,那么就要重新开辟一块空间,把原来地址里面的内容取出来放在现在开辟好的新的空间,返回的也是新的地址的起始地址

int main()
{int* p = (int*)calloc(10,sizeof(int));//好习惯是每天养成的,记住一定要判断是否是空指针if (p == NULL)return 1;for (int i = 0; i < 10; i++){printf("%d ", p[i]);}//现在我认为我的空间开辟小了想要扩容p = (int*)realloc(p, sizeof(int) * 15);//后面的sizeof(int) * 15是新空间的大小,单位是字节//然后我继续打印for (int i = 10; i < 15; i++){p[i] = i;printf("%d ", p[i]);}free(p);p = NULL;return 0;
}

最后再提一下如果realloc前面的指针是空指针,那么realloc的功能就等同于malloc了

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

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

相关文章

添加新公司代码的配置步骤-Part2

原文地址&#xff1a;配置公司代码 概述 在第一部分中&#xff0c;我讨论并列出了在 SAP 中构建新公司代码时企业结构部分所需的任务。在这篇博客中&#xff0c;我将列出并讨论 FI 模块中需要配置的内容。您还记得本主题涵盖六个部分。 企业结构 - 第 1 部分 FI 配置– 第 2…

有效解决wordpress的502 Bad Gateway错误提示

摘要&#xff1a;最近有客户反映使用阿里云虚拟云主机&#xff0c;wordpress常提示502 Bad Gateway错误&#xff0c;网关错误是网站上遇到的常... wordpress的502 Bad Gateway错误如何修复&#xff1f; 第1步&#xff1a;偶发错误可尝试重新加载网站 偶尔出现流量突发爆增或是服…

智能优化算法应用:基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.广义正态分布算法4.实验参数设定5.算…

揭秘C语言结构体:通往内存对齐的视觉之旅

揭秘C语言结构体&#xff1a;通往内存对齐的视觉之旅 引言 在C语言的编程旅程中&#xff0c;结构体&#xff08;structs&#xff09;是一个关键而强大的概念。结构体不仅允许我们组织和存储不同类型的数据&#xff0c;而且通过深入了解内存对齐&#xff0c;我们可以更好地优化…

处理器中的TrustZone之安全状态

在这篇博客中&#xff0c;我们将讨论处理器内对TrustZone的支持。其他部分则涵盖了在内存系统中的支持&#xff0c;以及建立在处理器和内存系统支持基础上的软件情况。 3.1 安全状态 在Arm架构中&#xff0c;有两个安全状态&#xff1a;安全状态和非安全状态。这些安全状态映射…

Linux 线程——信号量

题目&#xff1a;编写代码实现编写一个程序&#xff0c;开启三个线程&#xff0c;这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍&#xff0c;要求输出必须按照ABC的顺序显示&#xff0c;如&#xff1a;ABCABCABC... 思路&#xff1a;创建三个ID分别为ABC的线程…

ncnn模型部署——使用VS2019把项目打包成DLL文件

一、项目打包成DLL文件 1.创建动态链接库DLL项目 创建完成&#xff0c;项目中包含源文件dllmain.cpp, pch.cpp&#xff0c;头文件framework.h, pch.h 2.编写和配置DLL项目 &#xff08;1&#xff09;配置pch.h文件&#xff0c;在头文件pch.h中定义宏&#xff0c;宏的作用的是…

【爬取音乐,并将音乐信息储存到数据库中】

爬取音乐,并将音乐信息储存到数据库中 确定音乐网站的url并分析网站分析二级页面创建数据库使用Xpath解析&#xff0c;进行多层爬取保存信息完整代码结果 确定音乐网站的url并分析网站 分析二级页面 创建数据库 # 创建一个链接对象 conn pymysql.connect(hostmaster, userroo…

超大规模集成电路设计----FPGA时序模型及FSM的设计(八)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----RTL级设计之FSM&#xff08;八&#xff09; 7.1 CPLD的时序模型7.1.1 XPLA3 时序模型7.1.…

基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL

简介 CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要是能捕获数据变更的技术&#xff0c;我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕获数据库中数据变更的技术。CDC 技术的应用场景非常广泛…

【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)三种strlen模拟实现

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

mfc140u.dll文件下载的方法指南,教你多种方法修复mfc140u.dll

在面对诸如"mfc140u.dll文件丢失"或者"mfc140u.dll错误"等问题时&#xff0c;许多用户可能会考虑直接从互联网上下载该DLL文件来快速解决问题。确实&#xff0c;此类错误信息经常在尝试运行某些软件&#xff0c;特别是依赖于 Microsoft Visual C Redistrib…