1,c语言free函数

因为free函数仅仅是告诉操作系统,这一块内存被释放了,可以用来作其它用途。但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化。所以输出值不变。 通常建议,将这个p用完了也置NULL

c语言free函数

2,c 语言free函数用法

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

c 语言free函数用法

3,c语言free 函数

如果内存管理做的好的话,你只能释放你申请的地址,否则不释放。也就是说free(m+10); 和free(m-1);代码无效其实什么都没有释放
因为free函数仅仅是告诉操作系统,这一块内存被释放了,可以用来作其它用途。但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化。所以输出值不变。通常建议,将这个p用完了也置null
malloc在堆上申请的内存空间,申请多大free就释放多大。这里,free(m+10),不是malloc申请的空间free能释放吗?10是个未知

c语言free 函数

4,c 语言中的free 函数 用法

不能。FREE不能依靠单纯的指针去释放。 你去看看BMP文件的结构,看看很多的程序的结构,他们的结构体中都会存有数据的大小,而且因为面对的是数据流,所以大小往往被放在最开头。 同样的,你MALLOC(10) ,实际上一定会大于10,它要在内部去存储开辟内存的大小的数据,依次来决定释放的字节。 看见p - 2 的数值了吗?它就是14:10个字节的MALLOC,4字节是大小数据单元。 FREE就是根据那个数值才知道到底释放多少的。
free只要传入需要释放的指针就好了,上面的写法从函数使用的角度来讲没问题,不过void只是表示函数是无返回类型的,不能用来声明变量吧。当然malloc函数使用时最好前面强制转换为相应类型的指针例如(int *)malloc(sizeof(int));
完全正确。 只需注意产生野指针就好了。

5,C语言关于FREE函数的用法

不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。
如果你的指针指向某个内存空间,当然可以使用free释放,但如果你的指针什么都没有指,那释放什么呢
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是错误的。
定义的指针不占内存,指针只是一个指向内存(可以由malloc开辟)的东西,free释放的是指针所指向已经开辟好的内存空间,用free释放。不然容易造成内存泄漏!
free()不仅仅只能对malloc()分配过空间的才能free。free()释放的是堆内存,申请堆内存的函数不止malloc函数一个。另外,指针只是只向某个内存的地址,能不能被free,完全取决于指向的内存是不是堆内存,如果不是堆内存,就不可以free

6,c语言中 free的用法

malloc用来动态申请内存空间,而free用来释放malloc申请的空间。如: struct int a; int b; }node; main() node *lnode; lnode->a=33; lnode->b=99; lnode=(node*)malloc(sizeof(node)); printf("a=%d b=%d",lnode->a,lnode->b); free(lnode); return 0; }
free(fp)//fp为你定义的文件指针
不一定用来释放malloc开辟的空间,释放其他的指针空间也可以
free函数的原型是:void free(void *p)其作用是释放由p指向的内存区。
还可以参考http://hi.baidu.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 所得。

文章TAG:free  函数  c语言  语言  free函数  
下一篇