free(p)和p=NULL的区别_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > free(p)和p=NULL的区别

free(p)和p=NULL的区别

 2011/9/29 8:05:26  dawning126  http://dawning126.iteye.com  我要评论(0)
  • 摘要:不相同!free(p)指的是收回分配给它的空间,至于收回后p还指向之前的地址,不过里面的内容已经被清空了或者是乱码(这点可以编程输出一下p指向空间的内容,我在不同的机子上试的结果的不同,不过大多数是清空了的。而赋值为NULL,就是让其指向NULL这个地址。但是分配给p的那块内存不会收回去,这样就会造成内存的浪费!一般比较安全的写法是:free(p);p=NULL;即在free之后,再给p赋值为NULL。原因:free指的是收回分配给p的空间,在内存中将通过malloc给p分配空间后
  • 标签:区别


不相同!

free(p)指的是收回分配给它的空间,至于收回后p还指向之前的地址,不过里面的内容已经被清空了或者是乱码(这点可以编程输出一下p指向空间的内容,我在不同的机子上试的结果的不同,不过大多数是清空了的。

而赋值为NULL,就是让其指向NULL这个地址。但是分配给p的那块内存不会收回去,这样就会造成内存的浪费!

一般比较安全的写法是:free(p);  p=NULL;即在free之后,再给p赋值为NULL。

原因:free指的是收回分配给p的空间,在内存中将通过malloc给p分配空间后,该块空间就处于已分配状态,当你free后,该块内存就处于空闲即可分配状态。

详细点说就是在内存中会有一个空闲区域和已分配的区域,malloc后将从空闲区为其分配一块内存空间,并将该块内存从空闲区中删除,放置到已分配的区域,当你free后就又将它从已分配的区域划分到空闲区域。而此时你定义的指针p还是存在的,变成了野指针。这样就会造成内存泄露,这样就会存在安全问题。所以要给p赋一个NULL值!
发表评论
用户名: 匿名