当前位置: 首页 > news >正文

从零开始学习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(分配)的缩写&#xff0c;顾名思义&#xff0c;malloc函数为动态分配内存的意思 2、malloc函数语句 int *p(int *)malloc(sizeof(int))malloc函数的形参为申请的内存空间大小&#xff0c;上述申请了一个i…...

swagger关闭/v2/api-docs仍然可以访问漏洞

今天接到安全团队的说swagger有未授权访问漏洞&#xff0c;即使在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平台上&#xff0c;我们很少会直接创建一个Pod&#xff0c;在大多数情况下会通过控制器完成对一组Pod副本的创建、调度 及全生命周期的自动控制任务&#xff0c;如&#xff1a;RC、Deployment、DaemonSet、Job 等。本文主要举例常见的Pod调度。1全自动调度功能&…...

28个案例问题分析---10---对生产环境的敬畏--生产环境

一&#xff1a;背景介绍 1&#xff1a;上午9:23&#xff0c;老师没有进行上课&#xff0c;但是却又很多的在线人员&#xff0c;并且在线人员的时间也不正确。 2&#xff1a;开发人员及时练习用户&#xff0c;查看用户上课情况。 3&#xff1a;10点整&#xff0c;询问项目组长发…...

视觉SLAM十四讲ch7-1视觉里程计笔记

视觉SLAM十四讲ch7-1 视觉里程计笔记本讲目标从本讲开始&#xff0c;开始介绍SLAM系统的重要算法特征点法ORB特征BRIEF实践特征提取与匹配2D-2D&#xff1a;对极几何八点法求E八点法的讨论从单应矩阵恢复R&#xff0c;t小结三角化![在这里插入图片描述](https://img-blog.csdni…...

模仿评论样式

主要用到了padding-left把左侧的空白给留出来&#xff0c;然后把头像定位到留出的空白位置。行内对齐样式&#xff0c;使用了display:inline-flex;align-items:center;图标本来要用字体比较方便&#xff0c;暂时用的从icon font下载的svg样式写的一塌糊涂&#xff0c;一点也没考…...

xxl-job调度中心、执行器源码详解

文章目录简介调度中心一.程序启动初始化1.初始化入口类2.初始化I18n3.初始化快慢调度线程池4.初始化处理执行器注册或移除线程池更新执行器最新在线的守护线程5.初始化监控任务调度失败或执行失败的守护线程6.初始化处理执行器回调线程池监控任务执行结果丢失的守护线程7.初始化…...

cpp c++summary笔记 复杂类型 “right-left” rule

复杂类型 “right-left” rule 先向右走在向左走&#xff0c;循环往复&#xff0c;右侧的终止为看到右括号&#xff0c;右中括号&#xff0c;左侧为左括号&#xff0c;指针&#xff08;或其他int等&#xff09;。 符号读作*指向AA的指针(总在左侧)[]容纳AA的数组(总在左侧)()返…...

bash编程(马哥)

bash基础特性&#xff1a; 命令行展开&#xff1a;~&#xff0c;{} 命令别名&#xff1a;alias&#xff0c;unalias 命令历史&#xff1a;history 命令和路径补全&#xff1a;$PATH glob通配符&#xff1a;*&#xff0c;?&#xff0c;[]&#xff0c;[^]&#xff0c; 快捷键&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 使新的配置生效&#xff0c;需要执行如下命令:serv…...

朋友去华为面试,轻松拿到26K的Offer,羡慕了......

最近有朋友去华为面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…...

springboot项目如何配置启动端口

文章目录0 写在前面1 配置文件(.yaml)--推荐2 配置文件(.properties)3 IDEA配置--不推荐4 写在最后0 写在前面 项目启动需要一个独立的端口&#xff0c;所以在此记录一下。 根据配置文件的后缀书写格式略有不同。 1 配置文件(.yaml)–推荐 若是.yaml后缀的配置文件&#xff0…...

IOS - 抓包通杀篇

IOS中大多数情况&#xff0c;开发者都会使用OC提供的api函数&#xff0c;CFNetworkCopySystemProxySettings来进行代理检测&#xff1b; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口等&#xff1a; 采用直接附加页面进程&#xff1a; frida -UF -l 通…...

盒子模型的简介

盒子的组成 一个盒子由外到内可以分成四个部分&#xff1a;margin&#xff08;外边距&#xff09;、border&#xff08;边框&#xff09;、padding&#xff08;内边距&#xff09;、content&#xff08;内容&#xff09;。会发现margin、border、padding是css属性&#xff0c;因…...

Kubernetes 101,第二部分,pod

在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。 介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。 容器包装器 在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括: 规范:多个容器可…...

protobuf序列化解码原理

Protobuf的编码方式 Varints是一种紧凑表示数字的办法。他用一个或者多个字节表示一个数字&#xff0c;值越小的数字节节数越少。相对与传统的用4字节表示int32类型的数字&#xff0c;Varints对于小于128的数值都可以用一个字节表示&#xff0c;大于128的数值会用更多的字节来表…...

OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

学习OpenCV的过程中&#xff0c;画图是不可避免的&#xff0c;本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍&#xff1a; cv2.line(image, start_point, end_point, color, thickness)参数&#xff1a; image: 图像start_point&#xff1a…...

性能平台数据提速之路

作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践&#xff0c;如何高性价比满足大数据生产端提速&#xff1f;如何…...

Dns域名解析服务器

前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址&#xff1f; 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议&#xff0c;用来获取域名对应的IP地址 域名解析服务器的介绍 DNS&#xff08;Dom…...

关于 JavaScript 中的 Promises

在 JavaScript 中&#xff0c;Promise 是一个对象&#xff0c;它表示一个可能还不可用&#xff0c;但会在未来解决的值。Promises 用于处理异步操作&#xff0c;例如发出网络请求或访问数据库&#xff0c;其中结果不是立即可用的。如果你准备好了&#xff0c;我想开始我们的冒险…...

别再傻傻分不清了!用Simulink手把手带你搞懂导纳控制与阻抗控制的本质区别

导纳控制 vs 阻抗控制&#xff1a;从理论到Simulink实战的深度解析 在机器人控制领域&#xff0c;柔性交互是一个永恒的话题。想象一下&#xff0c;当机械臂需要完成精密装配任务时&#xff0c;既要有足够的刚性保证定位精度&#xff0c;又要在意外碰撞时表现出适当的柔顺性——…...

终极对比指南:Autoenv vs 其他环境管理工具,如何选择最适合你的目录环境自动化方案

终极对比指南&#xff1a;Autoenv vs 其他环境管理工具&#xff0c;如何选择最适合你的目录环境自动化方案 【免费下载链接】autoenv Directory-based environments. 项目地址: https://gitcode.com/gh_mirrors/au/autoenv Autoenv是一款强大的目录环境自动化工具&#…...

OpenClaw安全指南:百川2-13B模型权限管控与敏感操作防护

OpenClaw安全指南&#xff1a;百川2-13B模型权限管控与敏感操作防护 1. 为什么需要安全防护机制 去年冬天的一个深夜&#xff0c;我的OpenClaw经历了一次"惊魂时刻"。当时我让AI助手整理财务表格&#xff0c;结果它误将包含个人银行账号的临时文件上传到了云存储。…...

突破信息获取壁垒:智能内容解锁工具使用指南

突破信息获取壁垒&#xff1a;智能内容解锁工具使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾遇到这样的情况&#xff1a;一篇专业的技术文章、一份重要的研究报告…...

2026年主流接口测试平台慢因分析与选型参考

2026年主流接口测试平台慢因分析与选型参考 核心观点摘要 2026年接口测试响应慢核心诱因可归为三类&#xff1a;工具本身并发调度能力不足、协议适配不全导致额外转码开销、缺少AI智能链路优化能力&#xff0c;多数企业接口测试效率低与工具选型不当直接相关。本次盘点覆盖当前…...

QT程序从Windows到ARM开发板:手把手教你解决交叉编译中的屏幕适配问题

QT程序从Windows到ARM开发板&#xff1a;手把手教你解决交叉编译中的屏幕适配问题 在嵌入式开发领域&#xff0c;QT框架因其跨平台特性和丰富的UI组件库而广受欢迎。然而&#xff0c;当我们将QT程序从熟悉的Windows环境迁移到ARM开发板时&#xff0c;往往会遇到各种意想不到的挑…...

DanKoe 视频笔记:数字经济学:未来职业之路:从工作到游戏 [特殊字符]

在本节课中&#xff0c;我们将探讨未来职业发展的核心范式转变。我们将学习如何将个人好奇心转化为可持续的在线事业&#xff0c;并理解构建个人品牌与数字资产的底层逻辑。 在过去的一个月里&#xff0c;我意识到我生活中以及许多人生活中的一个共同主题&#xff1a;痴迷。 童…...

XC泰山服务器麒麟V10系统安装全流程解析

1. 准备工作&#xff1a;了解XC泰山服务器与麒麟V10系统 在开始安装之前&#xff0c;我们需要先了解一下XC泰山服务器和麒麟V10操作系统的基本情况。XC泰山服务器是国内自主研发的高性能服务器&#xff0c;采用ARM架构处理器&#xff0c;具有高性能、低功耗的特点。而麒麟V10则…...

智能排错助手:让快马AI分析你的openclaw安装错误并生成解决方案

最近在折腾openclaw这个工具时&#xff0c;遇到了不少安装报错的问题。作为一个经常在各类开发环境中摸爬滚打的程序员&#xff0c;我发现这类开源工具的安装过程往往隐藏着不少坑。不过这次尝试用AI辅助诊断后&#xff0c;整个排错效率提升了不少&#xff0c;这里记录下我的实…...

从零部署JetLinks社区版:一站式物联网平台本地化搭建实战

1. JetLinks社区版&#xff1a;物联网开发的瑞士军刀 第一次接触JetLinks社区版是在三年前的一个智能家居项目上。当时客户要求两周内搭建一个能管理5000设备的物联网平台&#xff0c;还要支持自定义协议开发。在对比了多个开源方案后&#xff0c;JetLinks的模块化设计让我眼前…...