资讯专栏INFORMATION COLUMN

动态内存管理(上)

sixleaves / 2059人阅读

摘要:函数的参数形式其中是所要释放的指针注意如果所释放的指针不是动态内存申请的,那函数是不会释放的,并且会导致程序崩溃,所以对于函数的使用必须是动态内存函数申请的。

目录

1.为什么会有动态内存管理

2.内存的存储形式:​

3.动态内存函数的介绍: malloc  free   calloc   realloc

—、malloc函数

二、free函数


1.为什么会有动态内存管理

我们都知道申请内存有两个方法  :

 1.变量加变量名

如 int a=10;这就向内存内存中申请了四个字节的空间用来存放a的地址。

2.变量名加数组名

如 char arr[10]={0};这就向内存中申请了10个字节的空间用来存放数组arr的地址。

上面这两种方式有一定的局限性,如我们创建了一个int arr[10],后续发现我有30个元素,

这样就存放不了,反之也是一样的道理。但是有些小伙伴初学的时候容易写成下面的代码,

 以为做到了想多少输多少,其实是错误的,因为对于数组来说下标必须是常量或常量表达式,否则会报错。

2.内存的存储形式:

3.动态内存函数的介绍 malloc  free   calloc   realloc

—、malloc函数

函数介绍1.malloc是进行内存申请的函数,若申请成功则会返回一个指向所申请的空间地址的指 

       针,若申请失败,则会返回一个NULL(空指针)。注:要使用时得判断返回的是否是空 

        指针,非空才能继续使用。(头文件是

      2.函数的参数形式void*malloc(size_t  size)

      3. void*是可以接受任意类型的指针(记得的强制类型转化成要接受的指针类型)。

      4. size_t 表示的是unsigned int 无符号整型  ,size表示所要申请的空间单位是字节。

      5.要和free函数配套使用(下文会讲)。

     

   malloc函数使用的例子:

#include#include#include#includeint main(){   int* p=(int*)malloc(40);//强制类型转化成int*,malloc向内存中申请40字节空间    if(p==NULL)   {     printf("%s",strerror(errno));//打印错误码所对应的错误信息,     return 0;//若为空则退出函数   }  for(int i=0;i<10;i++)    {       *(p+i)=i; 赋值       printf("%d ",*(p+i));打印    }    free(p);//释放p所指向的空间    p=NULL;//切断p和原来地址的联系    return 0;}

二、free函数

free函数介绍1.free函数是专门用来释放动态内存开辟的空间的一的函数,和其他和其他动态内 

                             存申请的函数配套使用(相当于一个去借一个去还)

                        2.函数的参数形式void free(void*ptr)其中void*ptr是所要释放的指针

      注意1.如果所释放的指针不是动态内存申请的,那free函数是不会释放的,并且   

                  会导致程序崩溃,所以对于free函数的使用必须是动态内存函数申请的。

                2.如果是free(NULL);那么free函数什么也不做,程序也不会报错,此时的     

                    free函数有跟没有是一样的 。

                3.free函数只是释放了*ptr所指向的空间,但还是可以通过*ptr找到当初所   

                   申请的空间,为了防止错乱,应将*ptr=NULL,切断他们的联系。

   free的使用可以看上面写过的代码。

还有两个下次补充。写作不易,记得支持一下。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119251.html

相关文章

  • 知道它!你就可以去找内存要空间了!——C语言动态内存管理(malloc大家族,柔性数组)

    摘要:在语言或内置的库中有能够进行动态内存开辟的库函数。动态内存管理函数参数表示需要开辟的内存的字节数。将动态申请的整型数组元素个数调整至。 ⭐️前面的话⭐️ 大家好!在...

    novo 评论0 收藏0
  • C语言进阶:动态内存管理

    摘要:释放不完全导致内存泄漏。既然把柔性数组放在动态内存管理一章,可见二者有必然的联系。包含柔性数组的结构用进行动态内存分配,且分配的内存应大于结构大小,以满足柔性数组的预期。使用含柔性数组的结构体,需配合以等动态内存分配函数。 ...

    shinezejian 评论0 收藏0
  • 【C语言进阶】动态内存管理/分配

    摘要:栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量函数参数返回数据返回地址等。 C语言动态内存分配篇 目录 一、为什么存在动态内存管理/分配?         内存的存储形式划分 二、动态内存函数的介绍         malloc ...

    Carson 评论0 收藏0
  • 05动态内存管理

    摘要:函数语言还提供了一个函数叫,函数也用来动态内存分配。函数为了更合理的时候内存追加增容函数的出现让动态内存管理更加灵活。  我知道的只是  肉随便加  和  要加多少加多少   这些词。    ———— 路飞 阶段2目标: 此阶段开始大量刷题,多多参加编程类竞赛,在实战中锻炼编程思维...

    mykurisu 评论0 收藏0
  • 动态内存管理

    摘要:函数用来释放动态开辟的内存。每次完,切记要把函数置成,函数的参数于不同,会开辟个大小为的空间,并且会把这些空间的内容初始化为举个例子函数的出现让动态内存管理更加灵活。 ...

    YuboonaZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<