尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

准备工作之动态内存分配[基于郝斌课程]

准备工作之动态内存分配[基于郝斌课程]
📅 发布时间:2026/6/18 15:53:09

定义一块内存可以用数组定义,也可以动态分配:

使用数组定义一块内存,则该块内存是静态的,也就是一旦定义之后,这块内存的大小就固定了,例如,数组元素个数是5,则定义后,这=这块内存大小就是5,不能再改变

但是用malloc动态分配的话,这块内存的大小就由我们自己来定义了,例如定义大小为5的内存块,使用完毕后,需要一个大小为3的内存块,就可以先使用malloc来定义一个大小为3的内存块,如何使用free来释放此块内存,之后再次使用malloc来定义大小为3的内存块,最后需要用free来释放该块内存


/*
@file      main.c
@brief     数据结构预备知识之动态内存分配
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-20
@history   2025-09-20 EricsT - 新建文件
*/#include <stdio.h>
#include <malloc.h>int main(void)
{int a[5] = { 4, 10, 2, 8, 6 };int len;printf("请输入您需要分配的数组长度:len = ");scanf("%d", &len);//malloc函数只返回首字节地址int* ptr = (int*)malloc(sizeof(int) * len);//分配内存*ptr = 4;//类似于a[0] = 4*(ptr + 1) = 10;//类似于a[1] = 10;ptr[2] = 2;//类似于a[2] = 2;printf("%d %d %d\n\n\n", ptr[0], ptr[1], ptr[2]);for (int i = 0; i < len; ++i)scanf("%d", ptr + i);for (int i = 0; i < len; ++i)printf("%d\n", ptr[i]);free(ptr);//释放内存return 0;
}

在以下程序中,调用了 f() 函数时, j 所占内存是存在的,当 f() 函数调用结束后, j 所占的内存就不合法了,因为 j 是一个局部变量


/*
@file      main.c
@brief     数据结构预备知识之动态内存分配
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-20
@history   2025-09-20 EricsT - 新建文件
*/#include <stdio.h>int f();int main(void)
{int i = 10;i = f();printf("i = %d\n", i);return 0;
}int f()
{int j = 20;return j;
}

在以下程序中,掉用函数结束后,ptr都可以指向合法的内存块


/*
@file      main.c
@brief     数据结构预备知识之跨函数使用内存
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-20
@history   2025-09-20 EricsT - 新建文件
*/#include<stdio.h>
#include <malloc.h>void fun(int** p);int main(void)
{int* p;fun(&p);//调用完之后,p就指向合法的内存块return 0;
}
void fun(int** p)
{*p = (int*)malloc(4);//手动分配,不释放就会一直被占用
}

/*
@file      main.c
@brief     数据结构预备知识之跨函数使用内存
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-20
@history   2025-09-20 EricsT - 新建文件
*/#include <stdio.h>
#include <malloc.h>struct Student
{int sid;int age;
};Student* CreatStudent(void);
void ShowStudent(Student* ptrStu);int main(void)
{Student* ptrStu;//占4个字节//Student std;//占8个字节,所以采用指针操作ptrStu = CreatStudent();ptrStu->age = 10;ptrStu->sid = 99;ShowStudent(ptrStu);return 0;
}Student* CreatStudent(void)
{return (Student*)malloc(sizeof(Student));
}void ShowStudent(Student* ptrStu)
{printf("%d %d\n", ptrStu->age, ptrStu->sid);
}

 

本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/19103325

相关新闻

  • 2025.6第一套六级听力生词
  • CSP-S 2025游记
  • atof() - 字符串转double类型

最新新闻

  • 生成式AI实操手记:从GAN、VAE到扩散模型的可复现训练指南
  • 江苏地区消防证培训综合实力排行及核心指标解析 - 起跑123
  • Cecropin A ;KWKLFKKIEKVGQNIRDGIIKAGPAVAVVGQATQIAK-NH₂
  • Citra 3DS模拟器终极画质优化指南:如何在普通电脑上获得最佳视觉体验
  • 2026 福州包包回收避坑指南!7 家正规门店盘点,闲置奢侈品变现首选添价收 - 薛定谔的梨花猫
  • 潮州防水补漏哪家好?2026 专业防水修缮 TOP3 排名解析,精准检测暗管漏水,厨卫、楼顶、阳台、飘窗外墙渗漏、瓷砖空鼓修补全套维修测评 - 泛家庭维修

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号