C语言:关于FREE()函数的用法
大神们,我想问下free()是不是只能对malloc()分配过空间的才能free,如果只是我定义的一个普通的指针,能不能通过free释放的?...
大神们,我想问下free()是不是只能对malloc()分配过空间的才能free,如果只是我定义的一个普通的指针,能不能通过free释放的?
展开
5个回答
展开全部
不可以的。
malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。
那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。
malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。
那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。
展开全部
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是错误的。
首先说明一下,你要释放的不是你定义的指针,而是你定义的指针指向的空间。
至于你定义的普通指针是不是可以通过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是错误的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
free()不仅仅只能对malloc()分配过空间的才能free。free()释放的是堆内存,申请堆内存的函数不止malloc函数一个。
另外,指针只是只向某个内存的地址,能不能被free,完全取决于指向的内存是不是堆内存,如果不是堆内存,就不可以free
另外,指针只是只向某个内存的地址,能不能被free,完全取决于指向的内存是不是堆内存,如果不是堆内存,就不可以free
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义的指针不占内存,指针只是一个指向内存(可以由malloc开辟)的东西,free释放的是指针所指向已经开辟好的内存空间,用free释放。不然容易造成内存泄漏!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你的指针指向某个内存空间,当然可以使用free释放,但如果你的指针什么都没有指,那释放什么呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询