动态分配的存储区,free后是否释放?

boliantangyang 2007-03-31 09:43:04
例如:
struct addr
{ char name[10];
struct addr *next;
}addrnode;
main()
{
struct addr *p;
p=malloc(sizeof(addrnode));
free(p);
}
请问free(p)释放的是p所向的内存吗?还是释放该指针?如果释放的是志向的内存,那么请问,free(p)后,该内存区(动态存贮区)的内容为0或NULL吗?或者不变?
如果调用p=malloc()函数后,如果不用free(p)释放,该动态存储区永远存在吗?
也就是说,该存储区不能再分配给其他的程序吗?也就是说,这部分的堆空间永远被锁定吗?
...全文
257 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chensanniang 2007-03-31
  • 打赏
  • 举报
回复
1 :请问free(p)释放的是p所向的内存吗?还是释放该指针? //是释放P指向的内存.
2: 如果释放的是志向的内存,那么请问,free(p)后,该内存区(动态存贮区)的内容为0或NULL吗?或者不变?//是使P指向NULL,原来的空间能被别的变量引用.
3:如果调用p=malloc()函数后,如果不用free(p)释放,该动态存储区永远存在吗?//不释放的话在程序完成以后,即函数调用完成以后,由操作系统收回.当然收回以后,就可以再被使用.

chenyu2202863 2007-03-31
  • 打赏
  • 举报
回复
释放了free(p);后,最好把加上p=NULL;
虽然你free了p所指的内存上的内容,但指向的位置没变,下次不小心再次使用p的时候就没问题了
cphua 2007-03-31
  • 打赏
  • 举报
回复
p=malloc(sizeof(addrnode));申请的空间大小,只包括char name[10];struct addr *next;这2个单位的空间(一个数组空间和一个指针大小的空间),free(p)也只会释放这些空间。至于*next指向的空间,free(p)是不会去释放的。

如果申请了一块空间,不free的话,该块空间会一直存在且无法再次分配,这就是内存泄露。
yifanernei 2007-03-31
  • 打赏
  • 举报
回复
free只释放了p指向的内存,但next指针指向的内存没有被释放
p做为一个局部变量,当生命周期结束时,占用的内存会自动释放并可再次使用
free只是将内存表中该块内存的可用状态改变了一下,就像windows下删除文件一样
程序退出后,内存可以重新分配给其它程序,但程序没有退出前这部分空间将不可再用
thinkinnight 2007-03-31
  • 打赏
  • 举报
回复
malloc的时候就是说,啊,这片内存我现在占着,大家不要用。
然后free的时候就是说,啊,现在这片内存我不用了,还回来,大家想用就去用吧。
freemonday2002 2007-03-31
  • 打赏
  • 举报
回复
内容应该不变,释放的是该指针所站的系统资源
francois03 2007-03-31
  • 打赏
  • 举报
回复
回复 chensanniang()

2: 如果释放的是志向的内存,那么请问,free(p)后,该内存区(动态存贮区)的内容为0或NULL
吗?或者不变?//是使P指向NULL,原来的空间能被别的变量引用.

这里p不会自动指向NULL的,必须由编程者自己进行设置,使p=NULL。free(p)只是释放相应的空间,空间里面存储的东西也会发生改变吧,但是会变成什么就不知道了,是不是与操作系统有关啊?
xlbdan 2007-03-31
  • 打赏
  • 举报
回复
请问free(p)释放的是p所向的内存吗?还是释放该指针?如果释放的是志向的内存,那么请问,free(p)后,该内存区(动态存贮区)的内容为0或NULL吗?或者不变?

是的,释放的是p所向的内存,而不是该指针,该指针此时是一个野指针,它说不定指向哪里,这也正是一个潜在的错误 ,所以在free(p)之后,一定要令p=NULL,就是让它哪也别指向


如果调用p=malloc()函数后,如果不用free(p)释放,该动态存储区永远存在吗?
也就是说,该存储区不能再分配给其他的程序吗?也就是说,这部分的堆空间永远被锁定吗?


不释放的话动态区就一直存在到程序结束,这块内存就不能再分配给别人 了.

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧