首页 > 系统相关 >动态内存管理

动态内存管理

时间:2024-09-23 20:19:36浏览次数:10  
标签:malloc 函数 管理 int free 动态内存 空间 ptr

目录

动态内存分配的需求

 malloc函数与free函数

 malloc函数

free函数

示例

calloc函数和realloc函数

calloc函数

realloc函数


动态内存分配的需求

int val = 20;//在栈空间上开辟四个字节
char arr[10] = {0};//在栈空间上开辟10个字节的连续空间

1. 空间开辟大小是固定的。

2. 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了大小不能调整。

3. C语⾔引⼊了动态内存开辟,让程序员自己可以申请和释放空间,就比较灵活了。

 malloc函数与free函数

 malloc函数

void* malloc (size_t size);

1. 这个函数向内存申请⼀块连续可⽤的空间,并返回指向这块空间的指针。

2. 如果开辟成功,则返回⼀个指向开辟好空间的指针。

3. 如果开辟失败,则返回⼀个 NULL 指针,因此malloc的返回值⼀定要做检查。

4. 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使⽤的时候使⽤者⾃ ⼰来决定。

free函数

void free (void* ptr);

1. C语⾔提供了另外⼀个函数free,专⻔是⽤来做动态内存的释放和回收的。

2. 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。

3. 如果参数 ptr 是NULL指针,则函数什么事都不做。

示例

1. malloc和free都声明在 <stdlib.h> 头⽂件中。

2. free()释放动态空间后可以进一步给NULL。(避免重复释放)

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    int arr[num] = {0};
    int* ptr = NULL;
    ptr = (int*)malloc(num*sizeof(int));//开辟一个(4*num)大小的空间
    if(NULL != ptr)//判断ptr指针是否为空
    {
        int i = 0;
        for(i=0; i<num; i++)
        {
            *(ptr+i) = 0;
        }
    }
    free(ptr);//释放ptr所指向的动态内存
    ptr = NULL;//是否有必要?
    return 0;
}

calloc函数和realloc函数

calloc函数

1. C语⾔还提供了⼀个函数叫 calloc ,calloc 函数也⽤来动态内存分配。

void* calloc (size_t num, size_t size);

2. 函数的功能是为 num 个⼤⼩为 size 的元素开辟⼀块空间,并且把空间的每个字节初始化为0。 3. 与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全 0。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *p = (int*)calloc(10, sizeof(int));
    if(NULL != p)
    {
        int i = 0;
        for(i=0; i<10; i++)
        {
        printf("%d ", *(p+i));
        }
    }
    free(p);
    p = NULL;
    return 0;
}
//0 0 0 0 0 0 0 0 0 0

realloc函数

1. realloc函数的出现让动态内存管理更加灵活。

2. 有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的使⽤内存,我们⼀定会对内存的⼤⼩做灵活的调整。那 realloc 函数就可以做到对动态开辟内存⼤ ⼩的调整。

void* realloc (void* ptr, size_t size);
//ptr 是要调整的内存地址
//size 调整之后新⼤⼩
//返回值为调整之后的内存起始位置。

4. realloc在调整内存空间的是存在两种情况: 

     情况1:原有空间之后有⾜够⼤的空间 :

                 要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发⽣变化。

     情况2:原有空间之后没有⾜够⼤的空间:

                 原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适大小的连续空间       来使⽤。这样函数返回的是⼀个新的内存地址。

标签:malloc,函数,管理,int,free,动态内存,空间,ptr
From: https://blog.csdn.net/hsy1603914691/article/details/142435534

相关文章

  • python+flask计算机毕业设计团场土地资源信息管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着农业现代化的不断推进和信息技术的高速发展,团场作为农业生产的基本单位,其土地资源的管理效率与精准度直接影响到农业生产的效益与可持......
  • 最好的文件管理器-dolphin
    WARN:windows没有,废话少说,直接开始what'sdolphin长得好看dolphin使用kde的主题管理,可以通过kde的主题商店配合kvantummanager配制出一个好看的主题,类似于我上面的(配置mac模式的是最简单的,相信苹果的设计师)分屏当然,还有很多其他的文件管理器可以分屏,但是dolphin可......
  • springboot+vue自驾游信息管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着生活水平的提高和私家车的普及,自驾游已成为现代人追求自由、个性化旅行方式的首选。然而,自驾游过程中涉及的信息繁多且复杂,包括路线规划、景点选择、美食探索、住宿预订等多个方面,传统的手工查询和记录方式已难以满足游客高效、便......
  • IT运维管理工具 WGCLOUD - 使用公共告警消息推送接口
    WGCLOUD的公共告警接口用于外部业务系统调用的告警接口,需要升级到v3.4.5或以上版本只要调用这个接口,就可以将消息同步推送到我们的告警平台,比如邮件,钉钉,企业微信等此接口主要给有告警需求的第三方系统使用,就可以调用此接口实现告警消息推送,会同步推送给WGCLOUD已配置的告警方式(......
  • springboot+vue中药实验管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着中医药事业的蓬勃发展,中药实验作为中医药教育与科研的重要组成部分,其管理水平直接影响着教学质量与科研成果的转化效率。然而,传统的中药实验管理模式多依赖于人工记录与纸质文档,存在信息更新不及时、资源共享难度大、管理流程繁琐......
  • springboot+vue羽毛球场管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着全民健身热潮的兴起,羽毛球作为一项广受欢迎的运动项目,其场地需求日益增长。然而,传统的人工管理模式在面对大量用户预约、场地分配、储物柜管理以及商品销售等复杂需求时,显得力不从心。这不仅影响了用户体验,也增加了管理成本。因此......
  • jsp蛋糕甜品店管理系统4fx6j
    jsp蛋糕甜品店管理系统4fx6j本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能用户,商品分类,商品尺寸,商品信息开题报告内容一、立题背景与意义随着互联网的普及和消费者购物习惯的改变,线上购物已......
  • jsp单重病患者复诊与跟踪管理系统87o39
    jsp单重病患者复诊与跟踪管理系本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能患者病历,医生,科室,医院信息,复诊记录,用户技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使......
  • jsp单位会议管理与服务系统lfx1r
    jsp单位会议管理与服务系统lfx1r本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能用户,类型,会议室,预约申请技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spr......
  • IT监控管理工具 WGCLOUD - 使用公共告警消息推送接口
    WGCLOUD的公共告警接口用于外部业务系统调用的告警接口,需要升级到v3.4.5或以上版本只要调用这个接口,就可以将消息同步推送到我们的告警平台,比如邮件,钉钉,企业微信等此接口主要给有告警需求的第三方系统使用,就可以调用此接口实现告警消息推送,会同步推送给WGCLOUD已配置的告警......