从零开始学习c语言|21、动态内存管理
一、malloc函数
1、什么是malloc函数
malloc是memery(内存)和allocate(分配)的缩写,顾名思义,malloc函数为动态分配内存的意思
2、malloc函数语句
int *p=(int *)malloc(sizeof(int))
malloc函数的形参为申请的内存空间大小,上述申请了一个int型数据的大小
malloc函数的返回值是这一块内存空间的首地址,上述代码即是将指针变量p指向这动态申请内存的首地址。
(*int)强制类型转换,即将该返回的地址类型强制转换为一个整型变量的地址,也就是说p和p+1相差
一个整型大小。
上述代码一个申请了12个字节的内存大小,p变量占8个字节(与cpu的大小有关),
p指向的内存为4个字节。
p本身的内存是静态分配的,p指向的内存是动态分配的
free(p)把p指向的内存释放掉,而p本身的内存只能由程序执行完毕,系统自动释放
3、malloc函数的用法
int *parry=(int *)malloc(sizeof(int*5);
动态申请5个整型变量大小的内存,即20个字节,parry指针变量指向的是该内存的首地址,
int * 表示该指针变量只能指向int型变量的地址,故parry等价于指向前4个字节,
*parry等价于parry[0];
#include <stdio.h>
#include <malloc.h>
int main()
{int *parry = (int *)malloc(sizeof(int) * 5);for (int i = 0; i < 5; i++){printf("请输入%d个元素的值\n", i + 1);scanf("%d", &parry[i]);}for (int i = 0; i < 5; i++){printf("第%d的值为 %d \n", i + 1, parry[i]);}return 0;
}

创建动态数组的好处
- 1、动态的决定数组的大小
- 2、数组可以由程序员动态的创建和释放
- 3、数组可跨函数使用
4、初始化内存空间
以mem开头的函数被编入字符串标准库,函数的声明包含在头文件string.h中
- memset:使用一个常量字节填充内存空间
- memcpy:拷贝内存空间
- memmov:拷贝内存空间
- memcmp:比较内存空间
- memchar:在内存空间搜索一个字符
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
int main()
{int *parry = (int *)malloc(sizeof(int) * 5);if (parry == NULL){exit(-1);}memset(parry, 0, sizeof(int) * 5);for (int i = 0; i < 5; i++){printf("%d ", parry[i]);}free(parry);return 0;
}

二、calloc函数
动态申请内存空间,并对其初始化
int *p=(int*)calloc(4,sizeof(int));
上述语句等价于
int *p=(int*)malloc(4*sizeof(int));
memset=(p,0,4*sizeof(int));
三、realloc函数
重新分配内存空间
int *ptr=NULL;
ptr = (int *)realloc(ptr, sizeof(int));//返回新的内存地址给ptr,ptr原本的值保存在新的内存空间
编写代码:让用户任意输入整数,输入一个整数,就动态添加一个内存空间,直到用户输入-1为止
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
int main()
{int num = 0;int i = 0;int *ptr = (int *)malloc(sizeof(int));if (ptr == NULL){exit(-1);}while (1){printf("请用户输入想要录入的数,输入-1跳出程序\n");scanf("%d", &num);if (num == -1)break;ptr[i] = num;i++;ptr = (int *)realloc(ptr, sizeof(int) * (i + 1));if (ptr == NULL){exit(-1);}}for (int j = 0; j < i; j++){printf("%d ", ptr[j]);}free(ptr);return 0;
}

相关文章:
从零开始学习c语言|21、动态内存管理
一、malloc函数 1、什么是malloc函数 malloc是memery(内存)和allocate(分配)的缩写,顾名思义,malloc函数为动态分配内存的意思 2、malloc函数语句 int *p(int *)malloc(sizeof(int))malloc函数的形参为申请的内存空间大小,上述申请了一个i…...
swagger关闭/v2/api-docs仍然可以访问漏洞
今天接到安全团队的说swagger有未授权访问漏洞,即使在swagger关闭的情况下http://127.0.0.1:8086/agcloud/v2/api-docs?group%E7%94%A8%E6%88%B7%E5%85%B3%E8%81%94%E4%BF%A1%E6%81%AF%E6%A8%A1%E5%9D%97仍然还能访问。 看了下原来是有写一个拦截器 registry.addI…...
k8s pod调度总结
在Kubernetes平台上,我们很少会直接创建一个Pod,在大多数情况下会通过控制器完成对一组Pod副本的创建、调度 及全生命周期的自动控制任务,如:RC、Deployment、DaemonSet、Job 等。本文主要举例常见的Pod调度。1全自动调度功能&…...
28个案例问题分析---10---对生产环境的敬畏--生产环境
一:背景介绍 1:上午9:23,老师没有进行上课,但是却又很多的在线人员,并且在线人员的时间也不正确。 2:开发人员及时练习用户,查看用户上课情况。 3:10点整,询问项目组长发…...
视觉SLAM十四讲ch7-1视觉里程计笔记
视觉SLAM十四讲ch7-1 视觉里程计笔记本讲目标从本讲开始,开始介绍SLAM系统的重要算法特征点法ORB特征BRIEF实践特征提取与匹配2D-2D:对极几何八点法求E八点法的讨论从单应矩阵恢复R,t小结三角化。 符号读作*指向AA的指针(总在左侧)[]容纳AA的数组(总在左侧)()返…...
bash编程(马哥)
bash基础特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 命令和路径补全:$PATH glob通配符:*,?,[],[^], 快捷键&am…...
搭建Gerrit环境Ubuntu
搭建Gerrit环境 1.安装apache sudo apt-get install apache2 注意:To run Gerrit behind an Apache server using mod_proxy, enable the necessary Apache2 modules: 执行:sudo a2enmod proxy_http 执行:sudo a2enmod ssl 使新的配置生效,需要执行如下命令:serv…...
朋友去华为面试,轻松拿到26K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…...
springboot项目如何配置启动端口
文章目录0 写在前面1 配置文件(.yaml)--推荐2 配置文件(.properties)3 IDEA配置--不推荐4 写在最后0 写在前面 项目启动需要一个独立的端口,所以在此记录一下。 根据配置文件的后缀书写格式略有不同。 1 配置文件(.yaml)–推荐 若是.yaml后缀的配置文件࿰…...
IOS - 抓包通杀篇
IOS中大多数情况,开发者都会使用OC提供的api函数,CFNetworkCopySystemProxySettings来进行代理检测; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口等: 采用直接附加页面进程: frida -UF -l 通…...
盒子模型的简介
盒子的组成 一个盒子由外到内可以分成四个部分:margin(外边距)、border(边框)、padding(内边距)、content(内容)。会发现margin、border、padding是css属性,因…...
Kubernetes 101,第二部分,pod
在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。 介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。 容器包装器 在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括: 规范:多个容器可…...
protobuf序列化解码原理
Protobuf的编码方式 Varints是一种紧凑表示数字的办法。他用一个或者多个字节表示一个数字,值越小的数字节节数越少。相对与传统的用4字节表示int32类型的数字,Varints对于小于128的数值都可以用一个字节表示,大于128的数值会用更多的字节来表…...
OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍: cv2.line(image, start_point, end_point, color, thickness)参数: image: 图像start_point:…...
性能平台数据提速之路
作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践,如何高性价比满足大数据生产端提速?如何…...
Dns域名解析服务器
前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址? 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议,用来获取域名对应的IP地址 域名解析服务器的介绍 DNS(Dom…...
关于 JavaScript 中的 Promises
在 JavaScript 中,Promise 是一个对象,它表示一个可能还不可用,但会在未来解决的值。Promises 用于处理异步操作,例如发出网络请求或访问数据库,其中结果不是立即可用的。如果你准备好了,我想开始我们的冒险…...
如何快速解决Visual C++运行库安装问题:终极一站式解决方案指南
如何快速解决Visual C运行库安装问题:终极一站式解决方案指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过应用程序无法启动&…...
sqlite-utils与Datasette集成:构建数据驱动的Web应用终极指南
sqlite-utils与Datasette集成:构建数据驱动的Web应用终极指南 【免费下载链接】sqlite-utils Python CLI utility and library for manipulating SQLite databases 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-utils sqlite-utils是一款强大的Pytho…...
STM32CubeMX 实战指南:LL库外部中断配置与按键响应优化
1. STM32CubeMX与LL库外部中断入门 第一次接触STM32外部中断时,我被它的响应速度惊艳到了。相比轮询方式,中断能让CPU在按键按下瞬间立即响应,就像有个24小时待命的管家。STM32CubeMX这个图形化配置工具,把原本需要手动编写的底层…...
UNet3+全解析:从结构创新到医学图像分割实战
1. UNet3为什么能成为医学图像分割的新标杆? 第一次看到UNet3的论文时,我正被一个肝脏CT分割项目折磨得焦头烂额。当时试过UNet、UNet、Attention UNet等各种变体,但总在一些微小病灶的边界分割上差强人意。直到把UNet3的代码跑起来ÿ…...
如何用Layerdivider快速实现智能图像分层:面向设计师和开发者的完整指南
如何用Layerdivider快速实现智能图像分层:面向设计师和开发者的完整指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider Layerdivider是一款强…...
HCIA前三章综合实验报告
实验要求按照图示配置IP地址完成路由器之间的协议配置构建需求的环境,配置MGRE,GRE测试全网通实验配置(1)配置IP地址[R1-GigabitEthernet0/0/0]ip address 192.168.1.2 24[R1-Serial4/0/0]ip address 15.1.1.1 24[R2-GigabitEther…...
基于MCP协议与Playwright的AI智能体网页抓取工具部署与实战
1. 项目概述:一个为AI智能体打造的“网页抓取工具箱” 如果你正在开发或使用基于MCP(Model Context Protocol)的AI智能体,并且经常需要让它们从网页上获取结构化数据,那么你很可能已经遇到了一个核心痛点: …...
system24主题开发实战:创建个性化配色方案的完整指南
system24主题开发实战:创建个性化配色方案的完整指南 【免费下载链接】system24 a tui-style discord theme 项目地址: https://gitcode.com/gh_mirrors/sy/system24 想要为Discord打造独特的视觉体验吗?system24主题开发为您提供了完美的起点&am…...
从 Classic ABAP 走到 ABAP Cloud,开发习惯、架构边界与 Clean Core 的重新建立
今天还在做 SAP S/4HANA 项目的人,大多已经感受到一个很现实的变化,真正难迁移的,从来不只是几段旧代码,也不只是把 SE80 里的对象搬到一个新工具里,而是整个开发思路要重新校准。以前很多团队习惯把 ABAP 当成一个紧贴业务系统内核的实现层,屏幕逻辑、数据库访问、增强点…...
