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

大神们,我想问下free()是不是只能对malloc()分配过空间的才能free,如果只是我定义的一个普通的指针,能不能通过free释放的?... 大神们,我想问下free()是不是只能对malloc()分配过空间的才能free,如果只是我定义的一个普通的指针,能不能通过free释放的? 展开
 我来答
樱信全无YX
推荐于2017-11-25 · TA获得超过630个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:257万
展开全部
不可以的。
malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。

那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。
左手烟雨
2012-10-09 · TA获得超过785个赞
知道小有建树答主
回答量:446
采纳率:100%
帮助的人:251万
展开全部
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是错误的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
召走刀文
2012-10-09 · TA获得超过1204个赞
知道小有建树答主
回答量:597
采纳率:57%
帮助的人:232万
展开全部
free()不仅仅只能对malloc()分配过空间的才能free。free()释放的是堆内存,申请堆内存的函数不止malloc函数一个。
另外,指针只是只向某个内存的地址,能不能被free,完全取决于指向的内存是不是堆内存,如果不是堆内存,就不可以free
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淼淼淡淡
2012-10-09 · 超过28用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:47.5万
展开全部
定义的指针不占内存,指针只是一个指向内存(可以由malloc开辟)的东西,free释放的是指针所指向已经开辟好的内存空间,用free释放。不然容易造成内存泄漏!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_左_手
2012-10-09
知道答主
回答量:49
采纳率:0%
帮助的人:27.7万
展开全部
如果你的指针指向某个内存空间,当然可以使用free释放,但如果你的指针什么都没有指,那释放什么呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式