如果不适用free释放内存,会造成内存泄露.随着程序的运行,程序所占内存越来越多,知道系统奔溃或者程序结束.
①.、free函数:
原型:void free(void *ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;
头文件:malloc.h或stdlib.h;
int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;
/* 执行大量操作后 */
if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}
因为free函数仅仅是告诉操作系统,这一块内存被释放了,可以用来作其它用途.但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化.所以输出值不变.
通常建议,将这个p用完了也置NULL
不可以的.
malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表.你自己定义的指针不会在这个列表中的,所以free会出问题的.
那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢.我的回答是,尽量不要,大部分情况都会带来风险.这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别.
还可以参考
=============
释放内存 free 函数
需要包含头文件(和 malloc 一样):
#include
或
函数声明:
void free(void *block);
即: void free(指针变量);
之所以把形参中的指针声明为 void* ,是因为free必须可以释放任意类型的指针,而任意类型的指针都可以转换为void *.
举例:
*p = 100;
free(p); //释放 p 所指的内存空间
或者:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间.
......
free(p);
free 不管你的指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete/delete [] 要方便.不过,必须注意,如果你在分配指针时,用的是new或new[],那么抱歉,当你在释放内存时,你并不能图方便而使用free来释放.反过来,你用malloc 分配的内存,也不能用delete/delete[] 来释放.一句话,new/delete、new[]/delete[]、malloc/free 三对均需配套使用,不可混用!
int* p = new int[100];
... ...
free(p); //ERROR! p 是由new 所得.
功
能:
与malloc()函数配对使用,释放malloc函数申请的动态内存.(另:如果p
是NULL
指针,那么free
对p
无论操作多少次都不会出问题.如果p
不是NULL
对p连续操作两次就会导致程序运行错误.)
用
法:
void
free(void
*ptr);
程序例:
//or
int
main(void)
{
char
*str;
/*
allocate
memory
for
string
*/
str
=
(char
*)malloc(10);
copy
"Hello"
to
strcpy(str,
"Hello");
printf("String
is
%s\n",
str);
free
free(str);
return
0;
}
这样可以么?
free(q); 释放q指针所拥有的资源,告诉系统,本程序不再使用该内存地址(free的功能就是这个)
q=q-next; 然后继续引用该地址,则程序可能会死掉!
以上就是土嘎嘎小编为大家整理的c语言free函数功能相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!