网站建设资讯

NEWS

网站建设资讯

c语言free函数功能,c语言中free函数的作用

C语言里是不是free()函数只能用来释放通过malloc建立的内存空间?

如果不适用free释放内存,会造成内存泄露。随着程序的运行,程序所占内存越来越多,知道系统奔溃或者程序结束。

成都创新互联公司主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、成都响应式网站建设、程序开发、网站优化、微网站、重庆小程序开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站制作、成都网站建设、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。

1、free函数:

原型:void free(void *ptr);

功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;

头文件:malloc.h或stdlib.h;

2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:

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;}

c语言free函数?

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

通常建议,将这个p用完了也置NULL

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

不可以的。

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

那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。

c语言中 free的用法~

还可以参考

=============

释放内存 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 所得。

c语言free的作用

能:

与malloc()函数配对使用,释放malloc函数申请的动态内存。(另:如果p

是NULL

指针,那么free

对p

无论操作多少次都不会出问题。如果p

不是NULL

指针,那么free

对p连续操作两次就会导致程序运行错误。)

法:

void

free(void

*ptr);

程序例:

#include

#include

#include

//or

#include

int

main(void)

{

char

*str;

/*

allocate

memory

for

string

*/

str

=

(char

*)malloc(10);

/*

copy

"Hello"

to

string

*/

strcpy(str,

"Hello");

/*

display

string

*/

printf("String

is

%s\n",

str);

/*

free

memory

*/

free(str);

return

0;

}

这样可以么?

数据结构(C语言版)中free函数的意义是什么,比如在单链表中我可不可以这样写:free(q);q

free(q); 释放q指针所拥有的资源,告诉系统,本程序不再使用该内存地址(free的功能就是这个)

q=q-next; 然后继续引用该地址,则程序可能会死掉!


网站名称:c语言free函数功能,c语言中free函数的作用
链接地址:http://cdweb.net/article/heshsg.html