c语言free
A. c语言free的作用
malloc 和 free 是在系统的栈上分配空间。
malloc是申请,意思就是告诉系统,我要用一块RAM,给我用了别人就不要用了。
free是释放,意思是告诉系统,给我的这块RAM我用完了,不再用了,系统可以把它干别的了。
free之后,系统还没有拿这块RAM干别的事之前,这块RAM的内容可能是不会变的,依然可以读出原来的内容,因为你的指针a还是指向这块RAM。但要注意,这块RAM已经不属于你了,读一下内容无所谓,如果往里面写就很危险了。
B. C语言:关于FREE()函数的用法
定义的指针不占内存,指针只是一个指向内存(可以由malloc开辟)的东西,free释放的是指针所指向已经开辟好的内存空间,用free释放。不然容易造成内存泄漏!
C. C语言在哪些情况下需要free
当内存是用malloc申请的时候
使用后,需要free
其它情况一般不需要free
不过需要注意的是,有些库函数 比如strp, 返回的是malloc的一个空间,用后也需要free
D. c语言中 free的用法~
还可以参考
http://hi..com/nidil/blog/item/e205770986fe24af2fddd4d7.html
=============
释放内存 free 函数
需要包含头文件(和 malloc 一样):
#include
或
#include
函数声明:
void free(void *block);
即: void free(指针变量);
之所以把形参中的指针声明为 void* ,是因为free必须可以释放任意类型的指针,而任意类型的指针都可以转换为void *。
举例:
int* p = (int *) malloc(4);
*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 所得。
E. C语言 free()函数的使用规则
free(a)和free(b)均可以,但是只能free一次,不能free(a)之后又free(b),那样会出错的。
free(c)也不行,因为c的位置没有保存malloc时的辅助信息(用于free)
第二个问题:
free(a)就是将链表中这一个节点释放了,a->next指向的内存不会释放,但是整个a包括a->next占用的空间都已释放,a->next不能再用了。
F. c语言free的作用
你的程序太简单, free之后没有其它操作,所以那块内存没有被写入其它内容.
free只是标记一下某块内存可用,但并不重写内容.
类似于删除文件, 只是打上标记, 内容还在硬盘上,如果没有被改写,还是可以恢复的.
G. C语言 free();
可以。free 后,数组存放单元没了,但指针还在,可以重新分配单元再用,再free.
不 free 也可以用 realloc 增减存放单元。
H. C语言中free的用法
for循环一结束,局部变量ps的所申请的空间就会释放
I. 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);
(9)c语言free扩展阅读
1、free是和malloc、realloc或者calloc函数成对出现的,来保证动态分配的空间及时释放。
2、一块动态申请的内存用free释放一次就够。
J. C语言的free()函数
double* p;
p=calloc(n*sizeof(double));
free(p);
谁告诉你参数是void类型啊,在c语言中void指针可以转换成指向任何类型的指针
你可以把calloc后返回的p指针理解成指向这一段内存,也可以理解成指向第一个元素
调用free()时p指针指向的是这一段内存,当然就可以释放了