摘要:函数的参数形式其中是所要释放的指针注意如果所释放的指针不是动态内存申请的,那函数是不会释放的,并且会导致程序崩溃,所以对于函数的使用必须是动态内存函数申请的。
目录
3.动态内存函数的介绍: malloc free calloc realloc
我们都知道申请内存有两个方法 :
1.变量加变量名
如 int a=10;这就向内存内存中申请了四个字节的空间用来存放a的地址。
2.变量名加数组名
如 char arr[10]={0};这就向内存中申请了10个字节的空间用来存放数组arr的地址。
上面这两种方式有一定的局限性,如我们创建了一个int arr[10],后续发现我有30个元素,
这样就存放不了,反之也是一样的道理。但是有些小伙伴初学的时候容易写成下面的代码,
以为做到了想多少输多少,其实是错误的,因为对于数组来说下标必须是常量或常量表达式,否则会报错。
函数介绍: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函数介绍: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 ...
阅读 2445·2021-11-23 09:51
阅读 3108·2021-11-22 14:44
阅读 3849·2021-11-22 09:34
阅读 4683·2021-10-08 10:14
阅读 1989·2021-09-22 15:47
阅读 3197·2021-09-22 15:40
阅读 2060·2021-09-06 15:01
阅读 1365·2019-08-30 15:44