C语言:关于FREE()函数的用法

大神们,我想问下free()是不是只能对malloc()分配过空间的才能free,如果只是我定义的一个普通的指针,能不能通过free释放的?

不可以的。
malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。

那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-09
C语言中,free可以释放calloc, malloc, realloc动态分配的空间。
首先说明一下,你要释放的不是你定义的指针,而是你定义的指针指向的空间。
至于你定义的普通指针是不是可以通过free释放,这个要看情况。如果你定义的指针指向动态分配的地址空间,则可以使用free释放指针指向的这段空间;否则,就不能使用free释放指针指向的空间。下面举两个例子:
例1:char *p = NULL; p = (char*)malloc(1024); if (p != NULL) free(p);
例2:char *p = NULL; char buf[1024]; p = (char*)buf; free(p);
其中,例1是对的,例2是错误的。本回答被网友采纳
第2个回答  2012-10-09
free()不仅仅只能对malloc()分配过空间的才能free。free()释放的是堆内存,申请堆内存的函数不止malloc函数一个。
另外,指针只是只向某个内存的地址,能不能被free,完全取决于指向的内存是不是堆内存,如果不是堆内存,就不可以free
第3个回答  2012-10-09
定义的指针不占内存,指针只是一个指向内存(可以由malloc开辟)的东西,free释放的是指针所指向已经开辟好的内存空间,用free释放。不然容易造成内存泄漏!
第4个回答  2012-10-09
如果你的指针指向某个内存空间,当然可以使用free释放,但如果你的指针什么都没有指,那释放什么呢

C语言:关于FREE()函数的用法
不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用fr...

free函数的用法
Free函数是C语言中用于释放已分配内存的函数。其主要作用是避免内存泄漏,确保程序在使用完某块内存后能够将其归还给操作系统。以下是关于Free函数的具体解释:一、基本用法 在使用Free函数时,需要包含头文件。其基本语法为:c void free;其中,ptr是一个指向已分配内存的指针。当不再需要该内存时,可以...

C语言中free函数的用法
free函数的用法释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete\/delete [] 要方便。如在分配指针时,用的是new或new[]。在释放内存时,并不能图方便而使用free...

C语言中的free函数如何正确使用
free(q);q = NULL;后,q和p指向的空间被释放,且q被赋值为NULL,但是此时p变量的值并没有改变,即其值还是原来申请的空间的首地址。这里注意原来申请的空间已被释放,只是p还保留那篇空间的首地址值,所以一般开发中释放空间后,要把相关变量赋值为NULL,以防后面会非法访问一个已经释放的空间。第...

c 语言free函数用法
free()释放已分配内存的函数 原形:void free(void *block)功能:释放由calloc、malloc、realloc函数调用所分配的内存。头文件:stdlib.h、alloc.h 所以你上面所做的和没加free(p)是一样的额

C语言中free怎么用?是只能用于指针变量吗?它如果释放静态内存会有什么结...
free 只是用来释放 malloc 函数在堆上申请的空间 别的什么也干不了!用法:如 int *p = malloc (sizeof(int) * 4)free(p);

c语言中,malloc和free是什么意思?
属于内存管理的两个函数,malloc是申请内存的,free是释放内存的。1、malloc一般用法:int *t=NULL;t=(int *)malloc(sizeof(int));也可以在sizeof前面加上一个'n*'这就成了一个动态分配数组的方法。2、free一般用法:int *t=NULL;t=(int *)malloc(sizeof(int));free(t);这样t所指的空间...

C语言关于free函数。
能这样思考是好的。不过想想内存是用什么标识的。要释放的是内存,而不是内存里面存储的内容。我们malloc出一块内存,是为了往里存放数据,但是里面存放的数据不是这段内存的标识,因为这些数据是不确定的,只有指向这段内存的指针才是这个内存块的标识。

c语言free 函数
如果内存管理做的好的话,你只能释放你申请的地址,否则不释放。也就是说free(m+10); 和free(m-1);代码无效 其实什么都没有释放

关于C语言中free函数的使用
free(*add(a,b));显然是写错了,应该是free(add(a,b));才对。改后从原理到语法都是正确的,是完全合法有效的。但为了释放内存,要调用两次自定义函数add这种操作值得吗?回答肯定是否定的;再说调用两次自定义函数就进行了两次malloc操作,释放的只是第二次调用申请的内存,第一次调用时申请的内存...

相似回答