动态内存管理(上)

简介: 目录:下篇在这呢: (5条消息) 动态内存管理(下)_执久呀的博客-CSDN博客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个元素,


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


微信图片_20220104230358.png


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


2.内存的存储形式:


image.png


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<stdio.h>
#include<malloc.h>
#include<string.h>
#include<errno.h>
int 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的使用可以看上面写过的代码。


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


目录
相关文章
|
3月前
|
存储 缓存 C语言
【c++】动态内存管理
本文介绍了C++中动态内存管理的新方式——`new`和`delete`操作符,详细探讨了它们的使用方法及与C语言中`malloc`/`free`的区别。文章首先回顾了C语言中的动态内存管理,接着通过代码实例展示了`new`和`delete`的基本用法,包括对内置类型和自定义类型的动态内存分配与释放。此外,文章还深入解析了`operator new`和`operator delete`的底层实现,以及定位new表达式的应用,最后总结了`malloc`/`free`与`new`/`delete`的主要差异。
83 3
|
8月前
|
程序员 C语言 C++
动态内存管理(2)
动态内存管理(2)
55 1
|
C语言 Python
动态内存管理(下)
动态内存管理(下)
67 0
|
8月前
|
程序员
21.动态内存管理
21.动态内存管理
|
9月前
|
程序员 编译器 C语言
带你彻头彻尾了解『动态内存管理』
带你彻头彻尾了解『动态内存管理』
|
9月前
|
编译器 程序员 C语言
动态内存管理(超详细!)
动态内存管理(超详细!)
72 2
|
9月前
|
安全 C++ 开发者
c++动态内存管理(二)
c++动态内存管理(二)
154 0
|
9月前
|
程序员 C语言 C++
详解动态内存管理!
详解动态内存管理!
|
编译器
动态内存管理(1)
动态内存管理(1)
71 0
|
C语言 C++
C++中的动态内存管理
C++中的动态内存管理