动态内存管理(下)(代码片段)

执久呀 执久呀     2022-12-30     411

关键词:

目录:上篇:(3条消息) 动态内存管理(上)_执久呀的博客-CSDN博客

           动态函数的介绍:malloc  free  calloc  realloc

         三、 calloc函数

        calloc函数介绍:

        calloc的使用例子:

四、 realloc函数

        realloc函数介绍:

        realloc函数的使用例子


动态函数的介绍:malloc  free  calloc  realloc

三、calloc函数

函数的参数形式:   void* calloc(size_t num , size_t size )

  其中void*是一个可以接受任意类型的指针,size_t表示的是unsigned int(无符号整型)

num表示的是多少个元素,size表示的是一个元素的大小,单位是字节

calloc函数介绍:

1.  calloc函数也是向内存申请空间的,若是申请成功则会返回一个指向内存首地址的指针,

若是申请失败,则会返回一个NULL(空指针),所以使用该函数也是需要进行判断是否为

非空指针,否则程序会出错。

2.calloc函数和malloc函数不同之处在于,calloc函数会将所申请到的内存空间全部

 初始化成0,而malloc函数则不会,这就意味着calloc比malloc运行时间更长

所以在选择这两个函数时可以根据是否需要初始化来选择。

calloc的使用例子:

#include<stdio.h>
#include<stdlib.h>
int main()

     int *ptr=(int*)calloc(10,sizeof(int));//用ptr指针来接受calloc返回的值,申请的空间是40字节
      if(ptr==NULL)
      
         return 0;//如果没申请成功则直接结束函数。
      
       else//为ptr非空的情况
      
          for(int i=0;i<10;i++)
             
                int kc=*(prt+i)=i;//将所申请的空间赋值
              printf("%d ",kc);//打印每个元素
            
           
      
     
       free(ptr);//释放所申请的内存空间,如不则容易导致内存泄漏
        ptr=NULL; //ptr还是指向原来所申请的地址,free不会将指针变为空,为了安全手动变为NULL

   return 0;

四、realloc函数

 函数的参数形式void* realloc(void*ptr , size_t num);

 其中void*ptr是要被改变的指针指向的地址,size_t num是改变之后的大小,单位是字节

  realloc函数介绍:

  1.realloc是一个专门用来调整申请动态内存的大小。(也是要和free函数配套使用)

  2.若realloc要扩大申请的空间,如果原始空间后有位置可追加则就在原指针之后进行追加,

   如果不够则另外找一块新的空间来,并且把存在旧的内存里的数据移动到新的内存空间

   并且释放旧的内存空间给操作系统,返回一个指向新的内存地址的指针

  3. realloc改变所申请空间的大小和上述函数类似,若申请失败则返回一个空指针,所以

     要判断所返回的值是否为非空,若为非空指针,则可以*ptr=*p

     (其中*ptr为旧的指针*p为新的指针)  

      注:若是将空指针赋值给*ptr,则原始内容地址将丢失(内存泄漏)  

   4.realloc函数功能较强大还可以实现malloc函数的功能,如 void* realloc(NULL,size_t  size);

       就是只需对NULL进行追加即可,它等价于void* malloc(size_t  size);

realloc函数的使用例子:

#include<stdio.h>
#include<stdlib.h>
int main()

   int* ptr=(int*)calloc(5,sizeof(int));//申请了5个int类型的内存,用ptr去接受返回来的指针
   if(ptr!=NULL)
      for(int i=0;i<5;i++)
         
           int input= *(ptr+i)=i;
           printf("%d ",input);
         
     
       int*p=(int*)realloc(ptr,40);//原ptr申请为10个int类型
     if(p==NULL)//这步判断不可少
       
          return 0;//若申请失败则直接退出函数
       
     else
     
         ptr=p;//将新地址赋给旧的地址
         for(int i=5;i<10;i++)
              
                 int hi= *(ptr+i)=i;
                 printf("%d ",hi);
              
     
        free(ptr);//释放申请的内存给操作系统,这步必不可少。
        ptr=NULL;//切断ptr和已经释放的内存空间的联系。

    return 0;

祝愿各位小伙伴们学有所成!!!!

动态内存管理(代码片段)

动态内存管理前言一、动态内存函数的介绍二、常见动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6.动态... 查看详情

动态内存管理(代码片段)

文章目录为什么存在动态内存分配动态内存函数的介绍mallocfreecallocrealloc常见的动态内存错误对NULL指针的解引用对开辟空间的越界访问对非动态开辟内存进行free使用使用free函数释放内存的一部分对同一块内存进行多次释放对动... 查看详情

关于动态内存管理的一些理解(代码片段)

动态内存管理文章目录动态内存管理为什么要存在动态内存分配动态内存函数的介绍mallocfreecallocrealloc注意事项:动态内存常见的错误对申请的动态空间不进行NULL检查对动态开辟的空间越界访问对非动态内存使用free释放使用... 查看详情

了解动态内存管理函数melloccallocfreerealloc,实现内存管理自由!(代码片段)

动态内存管理笔记自取链接:动态内存管理笔记文章目录动态内存管理导言一、mallco开辟动态内存空间二、free释放动态内存空间三、calloc初始化+开辟动态内存空间四、realloc调整动态内存空间大小小结导言众所周知~,... 查看详情

c语言进阶:动态内存管理(代码片段)

文章目录动态内存管理动态内存分配的意义动态内存函数的介绍开辟释放函数`malloc`&`free`函数声明函数用法内存开辟函数`calloc`函数声明函数用法内存调整函数`realloc`函数声明函数用法常见的动态内存... 查看详情

stm32内存管理(代码片段)

动态内存管理根据需要分配內存和回收内存通常在一块较大且连续的内存空间上进行分配和回收动态内存管理解决的问题内存资源稀缺,通过内存复用增加任务的并发性动态内存管理的本质时间换空间,通过动态分配和... 查看详情

c++动态内存管理(代码片段)

目录1.C/C++程序地址空间2.C语言动态内存管理(1)malloc(2)calloc(3)realloc(4)free3.C++动态内存管理(1)C++为什么要设计一套自己专属的动态内存管理方式?(2)new/delete定义1)new/delete操作内置类型2)new/delete操作自定义类型(3)new/d... 查看详情

动态内存管理(代码片段)

动态内存管理1.为什么要动态内存管理intval=20;//在栈空间上开辟四个字节chararr[10]=10;//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1.空间开辟大小是固定的。2.数组在申明的时候,必须指定数组的... 查看详情

动态内存管理(一次过)(代码片段)

动态内存管理为什么存在动态内存管理?什么是动态内存函数?常见的动态内存错误常见的笔试题C/C++程序的内存开辟为什么会有柔性数组?为什么存在动态内存管理?学了C语言之前的知识,我们应该知... 查看详情

动态内存管理与柔性数组(代码片段)

文章目录前言思维导图C/C++程序内存区域分类动态申请:malloc,calloc,reallocmalloccallocrealloc(重新分配已申请的空间)三者联系动态释放关键字:freefree内存泄露常见动态内存错误忘记free(内存泄漏)!!!!... 查看详情

动态内存管理详解(代码片段)

...束就释放内存(3)静态变量:程序运行结束就释放内存动态内存管理(即内存的申请和释放)目的:程序运行过程中,更灵活的进行内存的申请和释放~即:随时需要就申请ÿ 查看详情

动态内存管理详解(动态内存函数介绍+常见动态内存错误+经典笔试题)(代码片段)

文章目录为什么存在动态内存分配内存分配知识拓展动态内存函数malloc和free函数calloc函数realloc函数常见的动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动... 查看详情

c语言之动态内存管理(动态内存分配+经典笔试题+柔性数组)[建议收藏](代码片段)

本篇文章我要给大家梳理一下C语言中的动态内存管理相关知识。其中主要包括如何进行动态内存管理、一些常见的动态内存错误及柔性数组的介绍。❤️博主码云gitee链接:https://gitee.com/byte-binxin❤️文章目录为什么存在动... 查看详情

动态内存管理2(代码片段)

...uique_ptr来处理内存泄漏。一个类uique_ptr的对象维护了指向动态分配内存的一个指针,当一个uique_ptr对象的析构函数被调用时,它将对其指针数据成员执行delete操作。通过uique_ptr类的重载赋值运算符或拷贝构造函数,可以使一个uiq... 查看详情

c++动态内存管理(代码片段)

目录1.C/C++程序地址空间2.C语言动态内存管理(1)malloc(2)calloc(3)realloc(4)free3.C++动态内存管理(1)C++为什么要设计一套自己专属的动态内存管理方式?(2)new/delete定义1)new/delete操作内置类型2)new/delete操作自定义类型(3)new/d... 查看详情

c++动态内存管理(代码片段)

目录1.C/C++程序地址空间2.C语言动态内存管理(1)malloc(2)calloc(3)realloc(4)free3.C++动态内存管理(1)C++为什么要设计一套自己专属的动态内存管理方式?(2)new/delete定义1)new/delete操作内置类型2)new/delete操作自定义类型(3)new/d... 查看详情

从零开始学c++——c++动态内存管理(代码片段)

C++动态内存管理1.C/C++内存分布2.c++中的动态内存管理3.operatornew和operatordelete4.什么是内存泄露5.malloc/free和new/delete的区别1.C/C++内存分布接下来我们来看一下例子:intglobalVar=1;staticintstaticGlobalV 查看详情

一篇文章玩转c语言动态内存,轻松管理动态内存空间(代码片段)

C语言动态内存管理1、动态内存分配存在的原因2、动态内存函数的介绍2.1malloc函数2.2free函数2.3calloc函数2.4realloc函数3、常见的动态内存错误3.1对NULL空指针的解引用操作3.2对动态开辟空间的越界访问3.3对动态开辟空间的越界访问3.... 查看详情