freec语言函数,c++ free函数

求大神解惑C语言free函数工作原理?

首先肯定你的主动思考,学习的主动性

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了思礼免费建站欢迎大家使用!

然后明确说,malloc/free有多种不同的实现,可以认为都是采用第二种办法,或者变相采用第二种办法。

首先说静态变量行不通,不太可能只调用一次malloc,调第二次就覆盖掉了,行不通。

一般的实现,是把分配内存的长度等信息放在malloc来的指针的前面,用一个小结构来记录分配的大小以及状态信息,想要查证也不难,去下载一些源代码阅读一下就行。

至于你说的释放最近一次分配的内存,是另一个话题,涉及到内存泄漏。

举个小片段:

char *a = (char *)malloc(100);

a = (char *)malloc(100);

free(a);

分配了两次,只能free最后一次分配的,前一次分配的,丢掉了,找不回来。

这个最后一次,指的是这个意思

C语言 free()函数的使用规则

比如

int *a = (int*)malloc (100*sizeof(int));

int *b = a, *c = a + 10;

那么free(b) 和 free(a)是合法,他们的工作都是释放申请的a的内存100个int

再如用递归创建链表,

node* a = (node*)malloc(sizeof(node));

a-next = (node*)malloc(sizeof(node));

... ...

free(a)只释放node的申请内存,a-next不会释放,这样做会造成内存泄漏!

free的使用参考

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

不可以的。

malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。

那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。

C语言中free函数的用法

free函数的用法释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。

free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete/delete [] 要方便。如在分配指针时,用的是new或new[]。

在释放内存时,并不能图方便而使用free来释放。反过来,用malloc 分配的内存,也不能用delete/delete[]来释放。

举例:

int* p = (int *) malloc(4);

*p = 100;

free(p); //释放 p 所指的内存空间

或者:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。

……

free(p);

扩展资料

1、free是和malloc、realloc或者calloc函数成对出现的,来保证动态分配的空间及时释放。

2、一块动态申请的内存用free释放一次就够。


文章题目:freec语言函数,c++ free函数
文章路径:http://scyanting.com/article/phjdoh.html