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

[复制链接]
查看11 | 回复5 | 2017-11-25 14:00:19 | 显示全部楼层 |阅读模式
不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。...
回复

使用道具 举报

千问 | 2017-11-25 14:00:19 | 显示全部楼层
C语言中,free可以释放calloc, malloc, realloc动态分配的空间。
首先说明一下,你要释放的不是你定义的指针,而是你定义的指针指向的空间。
至于你定义的普通指针是不是可以通过free释放,这个要看情况。如果你定义的指针指向动态分配的地址空间,则可以使用free释放指针指向的这段空间;否则,就不能使用free释...
回复

使用道具 举报

千问 | 2017-11-25 14:00:19 | 显示全部楼层
free()不仅仅只能对malloc()分配过空间的才能free。free()释放的是堆内存,申请堆内存的函数不止malloc函数一个。另外,指针只是只向某个内存的地址,能不能被free,完全取决于指向的内存是不是堆内存,如果不是堆内存,就不可以free...
回复

使用道具 举报

千问 | 2017-11-25 14:00:19 | 显示全部楼层
定义的指针不占内存,指针只是一个指向内存(可以由malloc开辟)的东西,free释放的是指针所指向已经开辟好的内存空间,用free释放。不然容易造成内存泄漏!...
回复

使用道具 举报

千问 | 2017-11-25 14:00:19 | 显示全部楼层
如果你的指针指向某个内存空间,当然可以使用free释放,但如果你的指针什么都没有指,那释放什么呢...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行