用了free(*T)还要用一个NULL呢?这两个的作用有什么不一样?

作者&投稿:善邱 (若有异议请与网页底部的电邮联系)
$result->free()和result=null有什么区别吗?~

等于“” 表示值为“”;
等于null 表示声明了变量,而没有赋值。更表示为空的引用

一个指针,除非本身等于NULL,否则free以后不会等于NULL。因为free不对指针的值做任何操作,而只是试图改变指针指向的一片连续的存储器空间的状态。如果这片存储器空间是malloc或其它兼容方式(例如POSIX库函数strdup)分配过来的,那么会释放这片空间,释放的空间可以之后再次被分配。如果指针本来就等于NULL,则调用free不会有任何作用。除以上两种情况外(包括再次free已经被free过的非空指针),free的行为是未定义的,比较有可能的是free这个指针进程在某个时刻突然莫名其妙地崩溃。
int *p;
free(p);
这段代码如果是连续的,只能在函数内出现,那么int* p;是局部自动变量,不会隐式初始化为0(NULL)。未初始化的变量的值是不确定的(一般运气不会好到就是0;例如Microsoft Visual Debugger会在Debug模式下给未初始化的栈每个字节填充0xcc,根本不可能是0),直接free的后果不可预料。
为了防止错误地free掉已经被释放的指针,建议free某个指针之后立刻把这个指针赋值为NULL。
====
[原创回答团]

两者意思大不一样,你搞混了!free(T);是释放T指针指向的地址开头的一片空间,到底有多大必须是由malloc函数事先分配的已知数;但释放T指向的空间不是释放T指针,T一旦声明,在C中就释放不了了,它永远存在。为了防止后面误用T带来危险,常让它等于0(就是NULL);等于NULL的指针叫空指针,是使用不成的,这就避免了误用带来的危险。以后要用T时要重新赋值……

free是释放内存,将T赋值为NULL是防止非法操作

free之前必须有malloc或calloc动态分配过内存,必须成对使用,就是说分配了就要free释放
比如你一次分配了一段10字节的内存空间,在程序结束前,要free一次,
依次,分配过几次,就要free几次,
free的作用和malloc或calloc相反,malloc是向系统申请了内存,free就是把这些内存还给系统
要注意,free(T)的时候,T必须指向分配后最初的地址
如果没有申请,声明T是没有初始化,T就会随机指向一个地址,如果释放会出错,也就是要注意在程序中添加检查代码,使用T=NULL,就可以这样free:
if(T) free(T);
也可以这样分配:
if(T) T=malloc(...);


free是?
He is free with his money. 他花钱大手大脚。 11.随便的;放肆的be free with somebody 对某人放肆 12.【化】游离的;自由的副词ad. 1.免费地Children are admitted free. 孩子们免费入场。 2.无约束地Don't let the dogs run free. 别让狗到处乱跑。 3.松开着;脱开着The horse broke free. 马挣脱...

正确理解linux运行内存过高的问题以及free命令
free -m      #以MB为单位显示内存使用情况 free -g      #以GB为单位显示内存使用情况 free -o      #不显示应用(真实)内存使用情况列,不推荐 free -s<数字> #间隔数字秒数刷新显示内存使用情况 free -t    &#...

为什么free()函数中LNode->next为NULL
int AskMemory2(struct LinkNode *LNode){ int j=0,count=0;struct LinkNode *L=NULL,*H=NULL;assert(NULL!=LNode);if(NULL==LNode) exit(0);H=LNode; \/\/保存头地址 while(true){ H->next=NULL; \/\/初始化为NULL printf("\\t是否继续申请空间(1\/0):");scanf("%d",&j);if...

linux中查看虚拟内存和cpu占用率的命令是什么
top,free,cat \/proc\/meminfo,cat \/proc\/cpuinfo。[root@centerlisdb proc]# dmidecode |grep -A16 "Memory Device" | more [object Object]。查看内存使用情况:cat \/proc\/meminfo,查看CPU使用情况:cat \/proc\/cpuinfo。在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析...

求 神话的free 的歌词
Free Shinhwa Vol.5 - Perfect Man Minwoo :曾对你说无论怎样都不要离开我 不要离开我 但我只能把你送走 Junjin :请原谅我 oh my love 没有必要等我 不要安慰我 我都是为了你呀 Shinhwa :So I `m free Minwoo :I don`t wanna let you go now Shinhwa :Free Minwoo :我什么话也说...

enterprise和company的区别
陪伴 三、词汇搭配不一样 1、enterprise 1)free enterprise\\t自由经营 2)private enterprise\\t私营企业 3)small-sized enterprise\\t小型企业 2、company 1)limited company 有限公司;(英)股份有限公司(等于limited-liability company)2)in company 一起;当众 3)company with 奉陪;与?一起 ...

怎么用命令查看系统中的dentry数量
-m  以MB为单位显示内存使用情况。 -g 以GB为单位显示内存使用情况。 -o  不显示缓冲区调节列。 -s<间隔秒数>  持续观察内存使用状况。 -t  显示内存总和列。 -V  显示版本信息。 4.使用实例: 实例1:显示内存使用情况 命令: 代码如下: free free -g ...

c\/C++语言的串复制问题
1. if(T.ch) free(T.ch); 这需要你在声明一个HString变量的时候必须初始化使 ch = 0 ,否则这句free就会挂掉 2. for(int i=0,char *c=chars;c;++i,++c); 中间那个 c 什么意思 应该是 *c吧。 其实这个直接写 int i= strlen(chars);就可以了 ...

until,free,won't,i,next,friday,be(连词成句)
i won't be free until next friday

everything will be free,isn't it?什儿意思
everything will be free,isn't it?一切都将是免费的,不是吗?例句 everyth 1. Everything will be fine. Don't worry too much. 一切都会好起来的, 你别太多虑了.2. How about publicity, that's free isn't it? 那么平面媒体宣传呢?难道不是免费的 吗 ?为你解答,敬请采纳,如果本题...

仙游县19825304211: C语言中free掉一段空间后为什么还要使用NULL -
闽净泽荣: 指针free之后,free函数只是把指针指向的内存空间释放了,即内存中存储的值,但是并没有将指针的值赋为NULL,指针仍然指向这块内存.而程序判断一个指针是否合法,通常都是使用if语句测试该指针是否为NULL来判断,导致指针成为所谓...

仙游县19825304211: free的用法 -
闽净泽荣: free的用法 1. 表示“自由的”、“自发的”、“独立自主的”等义,有比较等级的变化 (freer, freest);表示“空闲的”、“空着的”、“免费的”等义,没有比较等级变化.如:She believes that women should befreer. 她相信妇女应该更自由...

仙游县19825304211: C++中new申请的内存,可以用free释放吗 -
闽净泽荣: 可以,但不安全,通过 free 调用释放 new 申请的内存并不总是能正确的释放所有申请的内存.因为使用 free 方法释放内存时并不会调用实例的析构函数,此时如果实例中有动态申请的内存将因为析构函数没有被调用而没有得到释放,从而导致...

仙游县19825304211: 编写图画程序代码,最后为什么还要加个“closegraph()? -
闽净泽荣: 就是用来释放资源用的,这两个函数就好像free()函数一样,会把你用完的不会再用的资源释放,因为他们不会自动的释放,除非整个程序结束.也就是说,如果不执行那两个代码的话,虽然你的函数结束了,但是画图程序和文件处理程序所占的系统资源还是占着,并没有被释放掉,依然存在着,这些系统资源在你程序生命周期结束之前就无法再被利用了.如果一个程序执行很长时间,系统资源就会耗尽,程序就会出错.

仙游县19825304211: C语言中已经有了malloc和free,为什么还需要new和delete? -
闽净泽荣: 转的1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.2, 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象...

仙游县19825304211: 字符指针用free释放后,需要设置null吗? -
闽净泽荣: 不置也行!最好置NULL,因为很多情况需要对一个指针多次分配和释放!所以没事置下空,会减少些恶心的麻烦!

仙游县19825304211: c++中有malloc/free 为什么还要new/delete -
闽净泽荣: 区别: 1. new/delete是C++里才有的,而new/delete与malloc/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:第一步是申请内存,第二步则是调用构造函数...

仙游县19825304211: 用C语言写一个高斯消元法解方程组的程序 -
闽净泽荣: 我们以方程组 2x1 + 6x2 - x3 = -12 5x1 - x2 +2x3 = 29 -3x1 - 4x2 + x3 = 5 为例 来说明楼主自己把方程组化为矩阵形式.以下为源代码 . #include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <math.h> int GS(int,double**,double *,double...

仙游县19825304211: C语言中free函数的用法 -
闽净泽荣: free函数的用法释放ptr指向的存储空间.被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配. free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete/delete [] 要方便.如在分配指...

仙游县19825304211: 用C语言写出输出1到1000的素数 每行八个 -
闽净泽荣: #include main() { int i,j,k=0; for(i=1;i{ for(j=2;jif(i%j==0)break; if(j>i/2){printf("%d ",i);k++;} if(k==8){k=0;printf("\n");} } } 希望对你有帮助!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网