C语言中free函数的用法

 我来答
小夏聊生活
高能答主

2019-12-10 · 专注于分享生活知识,热爱生活
小夏聊生活
采纳数:447 获赞数:114596

向TA提问 私信TA
展开全部

free函数的用法释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。

free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete/delete [] 要方便。如在分配指针时,用的是new或new[]。

在释放内存时,并不能图方便而使用free来释放。反过来,用malloc 分配的内存,也不能用delete/delete[]来释放。

举例:

int* p = (int *) malloc(4); 

*p = 100;

free(p); //释放 p 所指的内存空间

或者:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。

……

free(p);

扩展资料

1、free是和malloc、realloc或者calloc函数成对出现的,来保证动态分配的空间及时释放。

2、一块动态申请的内存用free释放一次就够。

松甜恬0Je4ba
推荐于2017-09-04 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3313万
展开全部
一、malloc()和free()的基本概念以及基本用法:
1、函数原型及说明:
void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。
关于分配失败的原因,应该有多种,比如说空间不足就是一种。
void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。
2、函数的用法:
其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子:
// Code...
char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));
if (NULL == Ptr)
{
exit (1);
}
gets(Ptr);
// code...
free(Ptr);
Ptr = NULL;
// code...
就是这样!当然,具体情况要具体分析以及具体解决。比如说,你定义了一个指针,在一个函数里申请了一块内存然后通过函数返回传递给这个指针,那么也许释放这块内存这项工作就应该留给其他函数了。
3、关于函数使用需要注意的一些地方:
A、申请了内存空间后,必须检查是否分配成功。
B、当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。
C、这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会
出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。
D、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一
些编译器的检查。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jelly279
2012-07-19 · TA获得超过244个赞
知道小有建树答主
回答量:332
采纳率:0%
帮助的人:94.9万
展开全部
要free的话首先那块空间得是malloc, calloc, realloc...开辟出来的内存空间, free多少取决于当时alloc出多少.
char* a = (char*)malloc(x*y*sizeof(char));//开辟了x*y个char的空间,(这里是二维的,如果多维就是要多少,开多少);
//相当于a[x][y];
//但是malloc出的空间是堆区的,而数组是在栈区的;两者都是连续的空间;栈空间是有限的,一般会是1k;堆空间相对多些;
......//使用这块空间;

free(a);// 释放空间;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鞠然腾蕴美
2019-04-21 · TA获得超过3978个赞
知道大有可为答主
回答量:3034
采纳率:33%
帮助的人:164万
展开全部
free()释放已分配内存的函数
原形:void
free(void
*block)
功能:释放由calloc、malloc、realloc函数调用所分配的内存。
头文件:stdlib.h、alloc.h
所以你上面所做的和没加free(p)是一样的额
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
塞奥盖绮烟
2019-11-29 · TA获得超过3743个赞
知道大有可为答主
回答量:3038
采纳率:34%
帮助的人:156万
展开全部
如果内存管理做的好的话,你只能释放你申请的地址,否则不释放。
也就是说free(m+10);
和free(m-1);代码无效
其实什么都没有释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式