free函数和malloc函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了free函数和malloc函数相关的知识,希望对你有一定的参考价值。
初学c和数据结构是对其很不明确,通过一些资料,稍微理解了,所以记下以后复习之用,如果有错误或者理解不当的情况请指正,不胜感激。
一malloc和free函数
malloc函数:(void*)malloc(sizeof(byte)),向系统申请大小的空间,然后返回指向这个内存的指针。如果内存分配失败,则返回一个空指针(NULL)当然,造成内存分配失败的吗原因有很多,其中一个是内存不足。
而free就是把这个操作空间返回给系统,释放这块内存。具体代码使用情况很简单
1 #include<stdio.h> 2 #include<stdlib.h> 3 void main() 4 { 5 int *a; 6 a=(int*)malloc(sizeof(int)); 7 if(!a) 8 exit(-1); 9 free(a); 10 a=NULL; 11 }
注意:malloc和free是对应的,当申请的空间不再使用后一定要free;free后要把指针初始化,以防野指针是出现。
2.函数操作原理
malloc从哪里申请内存?是从操作系统中的堆中申请空间内存的,这和链表有些相似,系统返回的指针指向堆中的内存,系统把空闲的结点练成一个链表,也就是空闲链表,当malloc时,系统从空闲链表中遍历,找到所需空间的的堆结点,然后把此结点从空闲链表中删除,把此结点分配给程序,而free操作,则是把结点归还到空闲链表中,通过指针的作用,这里不多说,可以看一下静态链表中的操作,是通过游标实现的,原理差不多。堆操作完成,当不需要使用次内存时,一定要释放,同时需要对指针进行初始化。
堆的释放是由程序员自己释放的。
与堆相对的是栈
栈是由编译器自动分配释放,存放函数的参数值,局部变量的值的。
假设定义一个指针,此指针指向堆,也就是说内存在堆上,但这个指针地址在栈中存储卡所以即使栈已经被销毁了,但是那块内存人在那里,所以使用完后一定要free操作
暂时先说这么多,下次再补充free和malloc函数源代码及原理……
以上是关于free函数和malloc函数的主要内容,如果未能解决你的问题,请参考以下文章