C54-动态开辟内存空间

article/2025/8/25 8:31:57

1.malloc

  • 原型void* malloc(size_t size);(位于 <stdlib.h> 头文件中)

  • 作用:分配一块连续的、未初始化的内存块,大小为 size 字节。

  • 返回值:

    • 成功:返回指向分配内存首地址的 void* 指针(需强制类型转换后才能使用)。
    • 失败(如内存不足):返回 NULL
  • 代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{char *p;             // 1. 声明一个 char 类型的指针 pp=(char *)malloc(1); // 2. 动态分配 1 字节的内存,并将地址赋给 p*p= 'c';             // 3. 将字符 'c' 存储到 p 指向的内存中printf("%c\n",*p);p=(char *)malloc(12);strcpy(p,"Hello!");printf("%s",p);return 0;
}
  • 成果展示:image-20250529122947592

2.realloc

作用:调整动态内存块大小(扩大/缩小)。

原型

void *realloc(void *ptr, size_t new_size);
  • ptr:原内存指针。
  • new_size:新大小(字节)。若为 0ptr 非空,等同 free

关键点

  1. 可能移动内存:若原位置空间不足,会分配新内存并复制数据。

示例

int *arr = malloc(5 * sizeof(int));  
arr = realloc(arr, 10 * sizeof(int));  // 扩容到10个int
free(arr);
  • 代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{char *p;             p=(char *)malloc(7);strcpy(p,"Hello!");printf("%s\n",p);printf("扩容前地址:%p\n",p);free(p); p=NULL;int len;len=strlen("若原位置空间不足,会分配新内存并复制数据");p=realloc(p,len+1);strcpy(p,"若原位置空间不足,会分配新内存并复制数据");printf("%s\n",p);printf("扩容后地址:%p\n",p);return 0;
}
  • 成果展示:

image-20250529160228308

3.free

作用:释放 malloc/calloc/realloc 分配的动态内存,防止内存泄漏。

用法

void free(void *ptr);  // ptr 必须是动态分配的内存地址

关键点

  1. 必须配对使用:每个 malloc 都要对应一个 free
  2. 避免悬空指针:释放后指针应置 NULLptr = NULL)。
  3. 禁止重复释放:对同一内存多次 free 会导致崩溃。
  4. 仅用于动态内存:静态数组(如 int a[10])不可 free

示例

int *p = malloc(10 * sizeof(int));  
if (p != NULL) {  // 使用内存...  free(p);  p = NULL; // 安全操作  
}

4.memset

功能

快速将某块内存的所有字节设为指定值(按字节填充)。

函数原型
void *memset(void *ptr, int value, size_t num);  
  • ptr:目标内存首地址(如数组、结构体)。
  • value:填充值(实际取低8位,范围0~255)。
  • num:填充的字节数(通常用 sizeof 计算)。
  • 返回值:返回 ptr 本身。

常用场景
  1. 清零内存(最安全):

    int arr[10];  
    memset(arr, 0, sizeof(arr)); // 所有字节置0  
    
  • 代码示例:
#include <stdio.h>
#include <string.h>int main()
{int arr[10]={1,2,3,4,};memset(arr,0,sizeof(arr));for(int i=0;i<10;i++){printf("%d ",arr[i]);}return 0;
}
  • 成果展示:

image-20250529215753001

  1. 填充字符数组:

    char str[10];  
    memset(str, 'A', 5);  // 前5字节设为'A'(需手动补'\0')  
    
  • 代码示例:
#include <stdio.h>
#include <string.h>int main()
{char arr[10];memset(arr,'S',5);for(int i=0;i<10;i++){printf("%c ",arr[i]);}return 0;
}
  • 成果展示:

image-20250529220119589


http://www.hkcw.cn/article/tfelKCtnwy.shtml

相关文章

【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 一.序列化和反序列化为什么需要序列化和反序列化为什么应用层…

【Tips】关于PCI和PCIe的配置空间差异和io/memory io读写

最近在看同事2023年讲的PCI基础课&#xff0c;感觉确实是豁然开朗了&#xff0c;赞美同事。 PCIe实际上是PCI的扩展&#xff08;extended&#xff09;&#xff0c;PCIe设备相当于是迭代升级产品。 而PCIe的配置空间基于PCI原有的0xFF&#xff08;256字节&#xff09;配置空间…

华为OD机试真题——阿里巴巴找黄金宝箱(III)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

拓扑排序算法剖析与py/cpp/Java语言实现

拓扑排序算法深度剖析与py/cpp/Java语言实现 一、拓扑排序算法的基本概念1.1 有向无环图&#xff08;DAG&#xff09;1.2 拓扑排序的定义1.3 拓扑排序的性质 二、拓扑排序算法的原理与流程2.1 核心原理2.2 算法流程 三、拓扑排序算法的代码实现3.1 Python实现3.2 C实现3.3 Java…

C#学习:基于LLM的简历评估程序

前言 在pocketflow的例子中看到了一个基于LLM的简历评估程序的例子&#xff0c;感觉还挺好玩的&#xff0c;为了练习一下C#&#xff0c;我最近使用C#重写了一个。 准备不同的简历&#xff1a; 查看效果&#xff1a; 不足之处是现实的简历应该是pdf格式的&#xff0c;后面可以…

华为OD机试真题——阿里巴巴找黄金宝箱(II)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现 一、网络流问题与相关概念1.1 网络流问题定义1.2 关键概念 二、Ford-Fulkerson算法原理2.1 核心思想2.2 算法步骤 三、Ford-Fulkerson算法的代码实现3.1 Python实现3.2 C实现3.3 Java实现 四、Ford-Fulkerson算法的时间…

摄像头模块的镜头类型

一、‌按光学功能分类‌ ‌球面镜&#xff08;Spherical Lens&#xff09;‌ ‌特点‌&#xff1a;表面为球面曲率&#xff0c;工艺简单且成本低&#xff0c;但存在球面像差和色差&#xff0c;边缘画质易模糊。 ‌应用‌&#xff1a;低端监控设备、玩具相机等对画质要求低的…

汽车EPS系统的核心:驱动芯片的精准控制原理

随着科技的飞速发展&#xff0c;电机及其驱动技术在现代工业、汽车电子、家用电器等领域扮演着越来越重要的角色。有刷马达因其结构简单、成本低廉、维护方便等优点&#xff0c;在市场上占据了一定的份额。然而&#xff0c;为了充分发挥有刷马达的性能&#xff0c;一款高效能、…

51c视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D时空中追踪万物&#xff01;国防科大提出首个长时场景流估计方法 本篇分享 TPAMI 2025 论文​​SceneTracker: Long-term Scene Flow Estimation Network​​&#xff0c;国防科大提出首…

【25-cv-05855】Keith律所代理Paula Alejandra Navarro 版权图

Paula Alejandra Navarro 版权图 案件号&#xff1a;25-cv-05855 立案时间&#xff1a;2025年5月27日 原告&#xff1a;Paula Alejandra Navarro 代理律所&#xff1a;Keith 原告介绍 原告是来自巴拿马的自由职业艺术家&#xff0c;擅长将精灵、中世纪服饰等经典奇幻元素…

vue自定义穿梭框(内容体+多选框)

最近需要做一个资源分配的一个功能&#xff0c;然后用到了穿梭框&#xff0c;但是需要更多的功能控制。具体业务场景如下&#xff1a;需要同时可以分配查看和下载的权限。实现效果如下&#xff1a; 组件用的是&#xff1a; Ant Design Vue 的穿梭框 操作方式&#xff1a;在左…

各国竞争的下一代液晶技术:中国铁电液晶取得重大突破突破

一、全球下一代液晶技术发展格局 &#xff08;一&#xff09;韩国&#xff1a;OLED 技术持续领先&#xff0c;布局量子点与柔性显示 韩国作为显示产业强国&#xff0c;三星、LG 等企业在 OLED 领域占据全球主导地位。三星的 AMOLED 技术广泛应用于高端智能手机&#xff0c;其柔…

张亚中提打败赖清德唯一策略 促两岸和平共识

随着国民党主席朱立伦任期即将届满,台湾孙文学校总校长张亚中已于21日宣布参选党主席。张亚中表示,国民党需要一个政策与路线的大辩论,包括两岸关系的核心问题和定位。他认为,若无此策略,国民党难以凭借资历、战力或团结击败现任台湾地区领导人赖清德重返执政。张亚中在接…

《深度关系-从建立关系到彼此信任》

陈海贤老师推荐的书&#xff0c;花了几个小时&#xff0c;感觉现在的人与人之间特别缺乏这种深度的关系&#xff0c;但是与一个人建立深度的关系并没有那么简单&#xff0c;反正至今为止&#xff0c;自己好像没有与任何一个人建立了这种深度的关系&#xff0c;那种双方高度同频…

LLaMaFactory - 支持的模型和模板 常用命令

一、 环境准备 激活LLaMaFactory环境&#xff0c;进入LLaMaFactory目录 cd LLaMA-Factoryconda activate llamafactory 下载模型 #模型下载 from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen2.5-0.5B-Instruct) 二、启动一个 Qwen3-0.6B…

数据结构——优先级队列(PriorityQueue)

1.优先级队列 优先级队列可以看作队列的另一个版本&#xff0c;队列的返回元素是由是由插入顺序决定的&#xff0c;先进先出嘛&#xff0c;但是有时我们可能想要返回优先级较高的元素&#xff0c;比如最大值&#xff1f;这种场景下就由优先级队列登场。 优先级队列底层是由堆实…

学习如何设计大规模系统,为系统设计面试做准备!

前言 在当今快速发展的技术时代&#xff0c;系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起&#xff0c;构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而&#xff0c;对于许多工程师而言&#xff0c;如何有效…

负载电容匹配:晶振电路设计中被忽视的隐形杀手

在电子电路的复杂世界里&#xff0c;晶振电路作为频率控制的核心部件&#xff0c;其稳定性和准确性对整个系统的性能起着举足轻重的作用。晶振就如同电子设备的“心脏起搏器”&#xff0c;精准地控制着电路的运行节奏。然而&#xff0c;在众多影响晶振电路性能的因素中&#xf…

Python Day36 学习

对列表、字典、元组、集合进行总结 浙大疏锦行 摘自讲义 机器学习管道Pipeline Q1. 什么是机器学习管道Pipeline&#xff1f; 摘自讲义 Q. 关于“转换器”&#xff1f; 摘自讲义 # 导入StandardScaler转换器 from sklearn.preprocessing import StandardScaler# 初始化转换…