C语言中free函数的用法

如题所述

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释放一次就够。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-04
一、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 *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一
些编译器的检查。本回答被提问者采纳
第2个回答  2012-07-19
要free的话首先那块空间得是malloc, calloc, realloc...开辟出来的内存空间, free多少取决于当时alloc出多少.
char* a = (char*)malloc(x*y*sizeof(char));//开辟了x*y个char的空间,(这里是二维的,如果多维就是要多少,开多少);
//相当于a[x][y];
//但是malloc出的空间是堆区的,而数组是在栈区的;两者都是连续的空间;栈空间是有限的,一般会是1k;堆空间相对多些;
......//使用这块空间;

free(a);// 释放空间;
第3个回答  2019-04-21
free()释放已分配内存的函数
原形:void
free(void
*block)
功能:释放由calloc、malloc、realloc函数调用所分配的内存。
头文件:stdlib.h、alloc.h
所以你上面所做的和没加free(p)是一样的额
第4个回答  2019-11-29
如果内存管理做的好的话,你只能释放你申请的地址,否则不释放。
也就是说free(m+10);
和free(m-1);代码无效
其实什么都没有释放
相似回答